问题描述
我正在尝试匹配 SMF 论坛中的内部链接,并将 BBC 标签从 url 转换为 iurl,这样链接如下:
[url=https://www.translatum.gr/forum/index.PHP?topic=989144.0]κατ' ἐπιταγήν -> by way of command[/url]
会变成:
[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
解决方法
您需要对字符串文字中的反斜杠进行双重转义以实际定义形成正则表达式转义的文字反斜杠字符。
此外,您的正则表达式替换过于冗余,您可能会捕获更多文本并使替换更短:
REGEXP_REPLACE(body,'\\[(url=https://www\\.translatum\\.gr.*?)\\[/url]','[i\\1[/iurl]')