2

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

尽管似乎在 regex101 中的测试中起作用,但在 SQL 上给出了垃圾输出(即,它被链接及其文本的多次迭代替换)。我已将此用于语法参考

4

1 回答 1

2

您需要对字符串文字中的反斜杠进行双重转义,以实际定义形成regex escapes的文字反斜杠字符。

此外,您的正则表达式替换太多余了,您可能会捕获更多文本并使替换更短:

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

请参阅此正则表达式演示

于 2020-12-24T16:21:50.067 回答