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

Posted

技术标签:

【中文标题】#1139 - 从正则表达式中得到错误“重复运算符操作数无效”【英文标题】:#1139 - Got error 'repetition-operator operand invalid' from regexp 【发布时间】:2013-08-21 10:47:21 【问题描述】:

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

【问题讨论】:

这不适用于任何中等大小的表格。 @NullUserException 我不会多次使用这个选择,我需要这个一次来查看我表中的哪些记录具有图像的绝对 url 而不是相对 url 并修复它们,然后我不会不再需要它了 你可以试试LIKE '%&lt;img src="http://www%' ...更简单 @ErickBest 不。我不知道我是否有&lt;img src="http://www&lt;img style="..." src="http://www",这就是我使用正则表达式的原因,即使&lt;img 我也必须检查图像源标记包含src 之前的其他属性 【参考方案1】:

根据MySQL manual

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

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

看起来你只需要使用贪婪版本,它应该仍然有效。为避免匹配&lt;img style="/*some style*/" src="a.png"&gt; &lt;script src="www.example.com/js/abc.js"&gt; 之类的内容,可以使用否定字符类:

'&lt;img[^&gt;]*src="http://www'

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

【讨论】:

那行不通。如果我有&lt;img style="/*some style*/" src="a.png"&gt; &lt;script src="http://www.example.com/js/abc.js"&gt;,它会返回那一行,这是错误的。 +1 - 当可以制作更精确的表达式时,切勿使用.*,即[^&gt;]*【参考方案2】:

你可以试试,

SELECT 
        text 
        , 
     IF (content LIKE '%<img src="http://%', text  , content LIKE '%<img style=%') 
as imageText

FROM    articles ORDER BY date DESC

这将首先检查内容在哪里有&lt;img src="http://,如果找不到,那么它将寻找&lt;img style=

希望对您有所帮助。

检查小提琴:http://sqlfiddle.com/#!2/6a2f0/13/0

【讨论】:

为什么 DownVote?...如果您的 DownVote 是真实的,请发表评论...和平!!

以上是关于#1139 - 从正则表达式中得到错误“重复运算符操作数无效”的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中创建正则表达式 [关闭]

正则表达式 - 从字符串中仅获取十进制数

使用正则表达式从字符串中提取数字和符号

为啥我没有得到正则表达式组值

用Python正则表达式从一个匹配项中打印出2个项目。

使用正则表达式从字幕格式化文本的问题