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

Jef*_*man 5 regex mysql pcre mariadb

我需要对messageMySQL 表中命名的列运行正则表达式查找和替换post

我的数据库正在运行 MariaDB 10。

根据docs,MariaDB 10 有一个新REGEXP_REPLACE函数专门用于执行此操作,但我似乎无法弄清楚实际的语法。

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

我想运行的正则表达式: \[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工作的正确语法是什么?

Ben*_*rth 5

你必须在这里做很多逃避:

REGEXP_REPLACE(message, "\\[quote\\sauthor=(.+)\\slink=[^\\]]+]", "\\[quote=\"\\1\"\\]")
Run Code Online (Sandbox Code Playgroud)

请注意,您必须通过以下方式引用该组:\\1

  • \ 会转义 SQL 中的某些内容。但是如果你想将 \ 传递给 `REGEXP_REPLACE` 函数,你必须转义 escap-Symbol... (2认同)