我在使用正则表达式从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给我这个错误以及如何解决它?
答案 0 :(得分:39)
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=
。
希望它有所帮助。