我使用正则表达式来查找特定的搜索,但是最后一个分隔符被忽略了。
必须搜索|49213A-Z|,但搜索|49213A-Z
SELECT * FROM table WHERE (data REGEXP '/\|49213[A-Z]+\|/')发布于 2017-09-26 09:18:52
为什么要在模式中使用|?为什么选择+
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][|]')发布于 2017-09-26 12:32:06
啊哈。这是相当微妙的。
\转义某些有特殊含义的字符。|.| ( " or“)或. ("any byte")等似乎不这样做。\|与regexp相同。正则表达式解析器不喜欢”“或”
https://dev.mysql.com/doc/refman/5.7/en/regexp.html说
若要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠()字符。MySQL解析器解释其中一个反斜杠,正则表达式库解释另一个。例如,要匹配包含特殊+字符的字符串1+2,则以下正则表达式中只有最后一个是正确的:
当您需要管道字符时,最好的修复方法似乎是[|]或\\|,而不是\|。
总有一天,MySQL中的REGEXP解析器将升级到PCRE,就像MariaDB中一样。然后,更多的功能将会出现,这个“bug”可能会消失。
https://stackoverflow.com/questions/46416380
复制相似问题