我在使用正则表达式从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会给我这个错误,我该如何修复它?
发布于 2013-08-19 23:32:24
根据MySQL manual的说法
MySQL使用Henry Spencer的正则表达式实现,旨在与POSIX 1003.2保持一致
POSIX regexes不支持使用问号?作为星号的非贪婪(惰性)修饰符,也不支持像PCRE (Perl兼容正则表达式)这样的加量词。这意味着您不能使用+?和*?
看起来你只需要使用贪婪的版本,它应该仍然可以工作。为了避免像<img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">这样的匹配,你可以使用一个被否定的字符类:
'<img[^>]*src="http://www'
注意:"不必转义,开头的.*是隐含的。
发布于 2013-08-20 00:17:25
你可以试一试
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
https://stackoverflow.com/questions/18317183
复制相似问题