#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 '%<img src="http://www%'
...更简单
@ErickBest 不。我不知道我是否有<img src="http://www
或<img style="..." src="http://www"
,这就是我使用正则表达式的原因,即使<img
我也必须检查图像源标记包含src
之前的其他属性
【参考方案1】:
根据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'
注意:"
不必转义,开头的 .*
是隐含的。
【讨论】:
那行不通。如果我有<img style="/*some style*/" src="a.png"> <script src="http://www.example.com/js/abc.js">
,它会返回那一行,这是错误的。
+1 - 当可以制作更精确的表达式时,切勿使用.*
,即[^>]*
【参考方案2】:
你可以试试,
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
【讨论】:
为什么 DownVote?...如果您的 DownVote 是真实的,请发表评论...和平!!以上是关于#1139 - 从正则表达式中得到错误“重复运算符操作数无效”的主要内容,如果未能解决你的问题,请参考以下文章