SQL Regex最后一个字符搜索不起作用

时间:2017-09-26 01:15:04

标签: mysql regex

我正在使用正则表达式查找特定搜索但最后一个分隔符被忽略。

必须搜索| 49213 [A-Z] |但搜索| 49213 [A-Z]

SELECT * FROM table WHERE (data REGEXP '/\|49213[A-Z]+\|/')

2 个答案:

答案 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)

啊哈。这是相当微妙的。

  1. \转义某些具有特殊含义的字符。
  2. |(“或”)或.(“任何字节”)等似乎没有这样做。
  3. 因此,\||相同。
  4. 但正则表达式解析器不喜欢“或”的任何一面为空。 (我怀疑这是一个“错误”)。因此错误信息。
  5. https://dev.mysql.com/doc/refman/5.7/en/regexp.html

      

    要在正则表达式中使用特殊字符的文字实例,请在其前面加上两个反斜杠()字符。 MySQL解析器解释其中一个反斜杠,正则表达式库解释另一个反斜杠。例如,要匹配包含特殊+字符的字符串1 + 2,只有以下正则表达式中的最后一个是正确的:

    当您需要管道字符时,最佳修补程序似乎是[|]\\|而不是\|

    有一天,MySQL中的REGEXP解析器将像MariaDB一样升级到PCRE。然后会有更多的功能出现,这个“错误”可能会消失。