在Mysql中从regexp获得错误'重复 - 操作符操作数无效'

时间:2014-03-26 01:42:02

标签: mysql regex select

我在使用正则表达式从MySQL表中选择一些结果时遇到了麻烦。

我正在使用此查询

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

它说

  

#1139 - 收到错误'重复操作员操作数无效'来自regexp

这个正则表达式适用于我的其他编辑/验证器。

任何建议都非常感谢。

1 个答案:

答案 0 :(得分:6)

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

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

事实上,你的例子中不需要任何parens。

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

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

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

我也遗漏了你的[^.]*,因为这个表达无关紧要。您不匹配字符串的开头,因此即使您在模式的其余部分之前有.,该类的字符也会成功匹配。你可能只想匹配字符串开头的非点字符,如下所示:

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