我正在尝试通过添加“ /”来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
答案 0 :(得分:2)
您无需正则表达式即可轻松做到这一点:
UPDATE `table` SET `column` = `column` + '/'
WHERE RIGHT(`column`, 1) <> '/'
答案 1 :(得分:0)
试图了解为什么它不起作用
在我合理化问题的同时,您正在要求REGEXP_REPLACE
做两件事:
您的正则表达式说它丢失了,但是我怀疑它是否指向要替换的特定子字符串(甚至是空的)。指向 found 子字符串(或多个子字符串)很容易。很难指出 missing 子字符串。并且需要这样的“指针”来进行替换。
因此,Michal的方法(即使需要一些正则表达式)也是解决问题的“正确”方法。