28

我无法使用正则表达式从我的 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 给我这个错误,我该如何修复它?

4

2 回答 2

58

根据MySQL 手册

MySQL 使用 Henry Spencer 的正则表达式实现,旨在符合 POSIX 1003.2

POSIX 正则表达式不支持将问号?用作星号的非贪婪(惰性)修饰符以及诸如 PCRE(Perl 兼容正则表达式)之类的量词。这意味着您不能使用+?*?

看起来你只需要使用贪婪的版本,它仍然可以工作。为避免匹配诸如 之类的东西<img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">,您可以使用否定字符类:

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

注意: the"不必转义,.*开头的 the 是隐含的。

于 2013-08-19T15:32:24.123 回答
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

于 2013-08-19T16:17:24.920 回答