我在使用正则表达式从MySQL表中选择一些结果时遇到了麻烦。
我正在使用此查询
select id, orderid, `desc`
from paymentlog
where `desc` REGEXP '[^.]*(?:_SVD(\d*))[[:>:]]'
它说
#1139
- 收到错误'重复操作员操作数无效'来自regexp
这个正则表达式适用于我的其他编辑/验证器。
任何建议都非常感谢。
答案 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:]*[[:>:]]'