#1139 - 从正则表达式中得到错误 '重复运算符操作数无效'
(#1139 - Got error 'repetition-operator operand invalid' from regexp)这个问题的出现的原因是MySQL使用的是Henry Spencer的正则表达式实现,而Henry Spencer的实现与POSIX 1003.2标准兼容。而POSIX正则表达式不支持在星号和加号量词中使用问号作为非贪婪(懒惰)修饰符,这意味着不能使用+?和*?。
解决方法是使用贪婪版本,即去掉问号修饰符。为了避免匹配类似于<img style="/*some style*/" src="a.png"> <script src="www.example.com/js/abc.js">
这样的内容,可以使用否定字符类:'<img[^>]*src="http://www'
。注意:引号不需要转义,并且开头的.*是隐含的。
然而,这种方法并不起作用。如果输入的内容是<img style="/*some style*/" src="a.png"> <script src="http://www.example.com/js/abc.js">
,它会返回错误的结果。
因此,应该避免使用.*,而应该使用更精确的表达式,例如[^>]*
。
(#1139 - Got error 'repetition-operator operand invalid' from regexp)这个问题出现的原因是正则表达式中的重复操作符无效。解决方法是将重复操作符修正为有效的操作符。
文章中的代码使用了正则表达式来匹配内容中的图片标签。然而,正则表达式中的重复操作符被错误地使用,导致出现了错误。
为了解决这个问题,我们可以将重复操作符修正为有效的操作符,以确保正则表达式的正确性。修正后的代码如下所示:
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=
。这样可以确保正则表达式的正确性。
希望这可以帮助解决问题。