#1139 - 从regexp获得错误'重复 - 操作数操作数无效'

Bac*_*ash 19 regex mysql select

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

我正在使用此查询

SELECT text 
FROM `articles` 
WHERE content REGEXP '.*<img.*?src=\"http://www' 
ORDER BY date DESC
Run Code Online (Sandbox Code Playgroud)

它说

#1139 - Got error 'repetition-operator operand invalid' from regexp
Run Code Online (Sandbox Code Playgroud)

我使用Notepad ++测试了正则表达式并且它有效,为什么MySQL给我这个错误,我该如何解决它?

Nul*_*ion 42

根据MySQL手册

MySQL使用Henry Spencer实现的正则表达式,旨在与POSIX 1003.2保持一致

POSIX正则表达式不支持将问号?用作星形的非贪婪(懒惰)修饰符以及像PCRE(Perl Compatible Regular Expressions)这样的量词.这意味着你不能使用+?*?

看起来你只需要使用贪婪的版本,它应该仍然有效.为了避免匹配类似的东西<img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">,你可以使用一个否定的字符类:

'<img[^>]*src="http://www'

注意:"不必转义,并且.*隐含在开头.

  • +1 - 当可以制作更精确的表达式时,切勿使用`.*`,即`[^>]*` (8认同)