首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL正则表达式最后一个字符搜索不起作用

问SQL正则表达式最后一个字符搜索不起作用
EN

Stack Overflow用户
提问于 2017-09-26 09:15:04
回答 2查看 357关注 0票数 1

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

必须搜索|49213A-Z|,但搜索|49213A-Z

代码语言:javascript
复制
SELECT * FROM table WHERE (data REGEXP '/\|49213[A-Z]+\|/')
EN

回答 2

Stack Overflow用户

发布于 2017-09-26 09:18:52

为什么要在模式中使用|?为什么选择+

代码语言:javascript
复制
SELECT * FROM table WHERE (data REGEXP '\|49213[A-Z]\|')

如果您想要多个:

代码语言:javascript
复制
SELECT * FROM table WHERE (data REGEXP '\|49213[A-Z]+\|')

或者:

代码语言:javascript
复制
SELECT * FROM table WHERE (data REGEXP '[|]49213[A-Z][|]')
票数 1
EN

Stack Overflow用户

发布于 2017-09-26 12:32:06

啊哈。这是相当微妙的。

  1. \转义某些有特殊含义的字符。|.
  2. But
  3. ,但对于| ( " or“)或. ("any byte")等似乎不这样做。
  4. 因此,\|与regexp相同。正则表达式解析器不喜欢”

“或”

  1. “的任何一方为空。(我怀疑这是一个"bug")。因此出现错误消息。

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

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46416380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档