regexp_replace()-匹配但不能在行尾替换

时间:2018-09-17 09:03:25

标签: regex replace mariadb pcre

我正在尝试通过添加“ /”来regexp_replace()以无“ /”结尾的列的所有值。

通过使用以下语句,我可以获得正确的值(该模式已通过PCRE检查器进行了测试):

SELECT * FROM `table` WHERE `column` REGEXP("(?<=[^\/])$");

与不匹配的匹配项:

SELECT * FROM `table` WHERE `column` REGEXP("(?<![^\/])$");

但是当声明是:

UPDATE `table` SET `column` = REGEXP_REPLACE(`column`, "(?<=[^\/])$", "/");

然后,无论我在第三个参数中输入什么值,都不会改变:

Query OK, 0 rows affected (0.00 sec)
Rows matched: 1031  Changed: 0  Warnings: 0

2 个答案:

答案 0 :(得分:2)

您无需正则表达式即可轻松做到这一点:

UPDATE `table` SET `column` = `column` + '/'
WHERE RIGHT(`column`, 1) <> '/'

答案 1 :(得分:0)

  

试图了解为什么它不起作用

在我合理化问题的同时,您正在要求REGEXP_REPLACE做两件事:

  • 发现缺少的东西,并且
  • 指向字符串中的位置。

您的正则表达式说它丢失了,但是我怀疑它是否指向要替换的特定子字符串(甚至是空的)。指向 found 子字符串(或多个子字符串)很容易。很难指出 missing 子字符串。并且需要这样的“指针”来进行替换。

因此,Michal的方法(即使需要一些正则表达式)也是解决问题的“正确”方法。