mysql - 在 MariaDB 中使用 REGEXP_REPLACE 进行正则表达式查找和替换的正确语法是什么?

标签 mysql regex pcre mariadb

我需要对名为 post 的 MySQL 表中名为 message 的列运行正则表达式查找和替换。

我的数据库运行的是 MariaDB 10。

根据docs , MariaDB 10 有一个新的 REGEXP_REPLACE 函数专门用来做这个,但我似乎无法弄清楚实际的语法。

它将影响 280,000 行,因此理想情况下,还有一种方法可以在我测试它时将其限制为一次仅更改一个特定的行,或者只是执行 SELECT 而不是 UPDATE 直到我确定它可以满足我的要求。

我要运行的正则表达式: \[quote\sauthor=(.+)\slink=[^\]]+]

替换字符串: [quote="$1"]

以下是我尝试过的,但它只是抛出一个 SQL 错误:

UPDATE post SET message = REGEXP_REPLACE(message, '\[quote\sauthor=(.+)\slink=[^\]]+]', '[quote="$1"]') WHERE post_id = 12

在这种情况下,原始消息是: [quote author=Jon_doe link=board=2;threadid=125;start=40#msg1206 date=1065088] 最终结果应该是 [quote="Jon_doe"]

使这个 REGEXP_REPLACE 工作的正确语法是什么?

最佳答案

你必须在这里做很多转义:

REGEXP_REPLACE(message, "\\[quote\\sauthor=(.+)\\slink=[^\\]]+]", "\\[quote=\"\\1\"\\]")

请注意,您必须通过 \\1

引用分组

关于mysql - 在 MariaDB 中使用 REGEXP_REPLACE 进行正则表达式查找和替换的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27498929/

相关文章:

java - 替换字符串内的子字符串不起作用? Java XML

javascript - 正则表达式获取花括号之间的字符串

正则表达式(PCRE 或 Emacs): Repetition of previously defined group

php - 如何获取颜色和服务的 $row 数据

mysql - 我应该将电子邮件存储在数据库中还是文本文件中?

mysql - mysql过程中的语法错误错误代码1064

c# - 为定界符创建转义序列的严格方法

regex - CPP 指令 #ifdef 正则表达式解决方案

php - PCRE正则表达式非连续重复

php - 如何在MySQL中存储欧洲货币?