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

时间:2013-08-19 15:08:12

标签: mysql regex select

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

我正在使用此查询

SELECT text 
FROM `articles` 
WHERE content REGEXP '.*<img.*?src=\"http://www' 
ORDER BY date DESC

它说

#1139 - Got error 'repetition-operator operand invalid' from regexp

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

2 个答案:

答案 0 :(得分:39)

根据MySQL manual

  

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

POSIX regexes不支持使用问号?作为星的非贪婪(懒惰)修饰符,加上像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 :(得分:0)

你可以尝试,

SELECT 
        text 
        , 
     IF (content LIKE '%<img src="http://%', text  , content LIKE '%<img style=%') 
as imageText

FROM    articles ORDER BY date DESC

这将首先检查内容的<img src="http://位置,如果找不到则会找到<img style=

希望它有所帮助。

检查小提琴:http://sqlfiddle.com/#!2/6a2f0/13/0