MySQL查询匹配不带引号的字符串

时间:2014-07-17 18:46:34

标签: mysql regex

我需要获取包含cooking spray的所有记录,但前提是它不在引号中:

cooking spray    > 1
'cooking spray'  > 0
"cooking spray"  > 0

我在制定REGEXP时遇到了麻烦。这似乎很接近,但我收到一条消息,说“重复 - 操作员操作数无效"。

select count(*)
from recipes r 
where r.ingredient REGEXP '(?<![\'"])cooking spray(?![\'"])'

3 个答案:

答案 0 :(得分:2)

您可以改为使用此REGEXP值:

SELECT COUNT(*)
FROM recipes r 
WHERE r.ingredient REGEXP '(^|[^\'"])cooking spray([^\'"]|$)'

修改
Patrick Q comment之后,我编辑了正则表达式以匹配:

  • cooking spray
  • foo cooking spray
  • cooking spray bar
  • foo cooking spray bar

答案 1 :(得分:0)

如何使用like

select count(*)
from recipes r
where r.ingredient like '%cooking spray%' and
      r.ingredient not like '%''cooking spray''%' and
      r.ingredient not like '%"cooking spray""%';

我意识到如果配料包含引用和未引用的形式,这些解决方案都不会起作用。为此,请使用replace

select count(*)
from recipes r
where replade(replace(r.ingredient, '''cooking spray''', ''), '"cooking spray"', '') like '%cooking spray%'

答案 2 :(得分:0)

尝试此操作(不使用外观):'.*[^"\']cooking spray[^"\'].*'

(PS: zessx 更快,他的回答更好地处理边缘情况)