MariaDB 中的正则表达式替换

Regular expression replace in MariaDB

我正在尝试匹配 SMF 论坛中的内部 links 并将 BBC 标签从 url 转换为 iurl 这样 link 这样的:

[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 gives garbage output on SQL (i.e. it is replaced with multiple iterations of the link and its text). I have used this for syntax reference

您需要对字符串文字中的反斜杠进行两次转义,以实际定义形成 regex 转义 .

的文字反斜杠字符

此外,您的正则表达式替换过于多余,您可以捕获更多文本并使替换更短:

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

参见this regex demo