我正在使用正则表达式查找特定搜索但最后一个分隔符被忽略。
必须搜索| 49213 [A-Z] |但搜索| 49213 [A-Z]
SELECT * FROM table WHERE (data REGEXP '/\|49213[A-Z]+\|/')
答案 0 :(得分:2)
为什么在模式中使用|
?为什么+
?
SELECT * FROM table WHERE (data REGEXP '\|49213[A-Z]\|')
如果你想要多个:
SELECT * FROM table WHERE (data REGEXP '\|49213[A-Z]+\|')
或:
SELECT * FROM table WHERE (data REGEXP '[|]49213[A-Z][|]')
答案 1 :(得分:0)
啊哈。这是相当微妙的。
\
转义某些具有特殊含义的字符。|
(“或”)或.
(“任何字节”)等似乎没有这样做。\|
与|
相同。https://dev.mysql.com/doc/refman/5.7/en/regexp.html说
要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠()字符。 MySQL解析器解释其中一个反斜杠,正则表达式库解释另一个反斜杠。例如,要匹配包含特殊+字符的字符串1 + 2,只有以下正则表达式中的最后一个是正确的:
当您需要管道字符时,最佳修补程序似乎是[|]
或\\|
而不是\|
。
有一天,MySQL中的REGEXP
解析器将像MariaDB一样升级到PCRE
。然后会有更多的功能出现,这个“错误”可能会消失。