MariaDB中的正则表达式替换

kyvafyod  于 10个月前  发布在  其他
关注(0)|答案(1)|浏览(80)

我试图匹配SMF论坛中的内部链接,并将BBC标签从url转换为iurl,以便像这样的链接:
第一个月
将成为:
[iurl=https://www.translatum.gr/forum/index.php?topic=989144.0]κατ' ἐπιταγήν -> by way of command[/iurl]
我在PhpMyAdmin上尝试过类似的东西(使用MariaDB 10.3)

UPDATE smf_messages
SET body = REGEXP_REPLACE(body, 
    '(\[url=https:\/\/www\.translatum\.gr)(.*?)(\[\/url\])', 
    '[iurl=https://www.translatum.gr\\2[/iurl]
  ')
WHERE ID_TOPIC = 987873

字符串
虽然它看起来在test in regex101上工作,但在SQL上会产生垃圾输出(即它被替换为链接及其文本的多次迭代)。我用this for syntax reference

i86rm4rw

i86rm4rw1#

你需要对字符串字面量中的反斜杠进行双转义,以实际定义形成 regex escapes 的字面量反斜杠char。
另外,你的正则表达式替换太冗余了,你可以捕获更多的文本,让你的替换更短:

REGEXP_REPLACE(body, '\\[(url=https://www\\.translatum\\.gr.*?)\\[/url]', '[i\\1[/iurl]')

字符串
请参阅this regex demo

相关问题