【问题标题】:Got error 'repetition-operator operand invalid' from regexp in Mysql从 Mysql 中的正则表达式得到错误“重复运算符操作数无效”
【发布时间】:2014-05-04 04:50:00
【问题描述】:

我无法使用正则表达式从我的 MySQL 表中选择一些结果。

我正在使用这个查询

select id, orderid, `desc`
from paymentlog
where `desc` REGEXP '[^.]*(?:_SVD(\d*))[[:>:]]' 

它说

#1139 - 从正则表达式中得到错误“重复运算符操作数无效”

这个正则表达式与我的其他编辑器/验证器配合得很好。

非常感谢任何建议。

【问题讨论】:

  • (?:) 对mysql没有多大意义
  • 另外,\d 并不代表你的想法!

标签: mysql regex select


【解决方案1】:

MySQL regular expressions 不支持Perl-Compatible Regular Expressions 的完整语法。

MySQL 不支持(?:) 分组语法。该语法用于没有反向引用的分组。但是在 MySQL 中没关系,因为 MySQL 无论如何都不支持反向引用(与此相关,MySQL 没有正则表达式替换功能)。

事实上,您的示例中不需要任何括号。

正如@ruakh 所说,\d 不是匹配数字的代码。您需要在 MySQL 中使用 POSIX 字符类。

所以你的表达应该是这样的:

where `desc` REGEXP '_SVD[:digit:]*[[:>:]]' 

我也忽略了你的[^.]*,因为它在这个表达式中并不重要。您没有匹配字符串的开头,因此该类的 zero 个字符将成功匹配,即使您在模式的其余部分之前确实有一个 .。您可能意味着仅当字符串开头有非点字符时才匹配,如下所示:

where `desc` REGEXP '^[^.]*_SVD[:digit:]*[[:>:]]' 

【讨论】:

  • 此表达式不会引发错误,但它与我的字符串“My Style 002_SVD1455466”不匹配。特别是词尾不起作用。
  • 最后表达式是 ^[^%]*_SVD[0-9]+$ 来匹配我的字符串
猜你喜欢
  • 2013-02-27
  • 2015-01-31
  • 2016-09-09
  • 2013-08-21
  • 2019-12-11
  • 2015-08-06
  • 2014-07-27
  • 1970-01-01
  • 2019-05-09
相关资源
最近更新 更多