微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MariaDB 中的正则表达式替换

如何解决MariaDB 中的正则表达式替换

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

this regex demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。