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

use*_*228 3 regex mysql select

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

我正在使用此查询

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

它说

#1139 - 从正则表达式获得错误'重复 - 运算符操作数无效'

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

任何建议都非常感谢.

Bil*_*win 6

MySQL正则表达式不支持Perl-Compatible Regular Expressions的完整语法.

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

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

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

所以你的表达式应如下所示:

where `desc` REGEXP '_SVD[:digit:]*[[:>:]]' 
Run Code Online (Sandbox Code Playgroud)

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

where `desc` REGEXP '^[^.]*_SVD[:digit:]*[[:>:]]' 
Run Code Online (Sandbox Code Playgroud)