【问题标题】:SQL Regex last character search not workingSQL 正则表达式最后一个字符搜索不起作用
【发布时间】:2017-09-26 01:15:03
【问题描述】:

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

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

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

【问题讨论】:

  • 编辑您的问题并提供示例数据和所需结果。什么被忽略了?
  • 最后一个| 不是

标签: mysql regex


【解决方案1】:

你为什么在模式中使用|?为什么是+

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][|]')

【讨论】:

  • 原因搜索 aaasea 而不仅仅是一个
【解决方案2】:

啊哈。这是相当微妙的。

  1. \ 转义某些具有特殊含义的字符。
  2. 但对于|(“或”)或.(“任何字节”)等似乎没有这样做。
  3. 所以,\|| 相同。
  4. 但正则表达式解析器不喜欢“或”的任一侧为空。 (我怀疑这是一个“错误”)。因此出现错误消息。

https://dev.mysql.com/doc/refman/5.7/en/regexp.html

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

当您需要管道字符时,最好的解决方法似乎是 [|]\\| 而不是 \|

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多