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]')
我正在尝试匹配 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]')