#1139 - 从正则表达式中得到错误 '重复运算符操作数无效'

32 浏览
0 Comments

#1139 - 从正则表达式中得到错误 '重复运算符操作数无效'

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

我使用了这个查询语句

SELECT text 
FROM `articles` 
WHERE content REGEXP '.*

然后它显示出以下错误信息

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

我在Notepad++中测试了这个正则表达式,它是有效的,为什么MySQL给我这个错误,并且我该如何修复它?

0
0 Comments

(#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">,它会返回错误的结果。

因此,应该避免使用.*,而应该使用更精确的表达式,例如[^>]*

0
0 Comments

(#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=。这样可以确保正则表达式的正确性。

希望这可以帮助解决问题。

0