即使没有匹配,Mysql REGEXP也会返回true。

时间:2015-04-08 00:38:08

标签: mysql regex

我使用以下查询

SELECT u.id
FROM users u
INNER JOIN user_widgets uw ON uw.user_id = u.id 
WHERE filters REGEXP '"job_skill":\{"label":"name","val":".*(\[\[3D Designer\]\])'

反对这个领域

{"job_skill":{"label":"name","val":"[[Web]]"},"country":{"label":"name","val":"[[Jordan]],[[Syria]]"},"city":{"label":"name","val":""}}

这个查询非常适合我的需求,但由于一些奇怪的原因,它会返回user_id,即使该字段显然不包含此值,它的上午3:36我的脑子几乎关闭,所以如果我不够清楚,请原谅我。

1 个答案:

答案 0 :(得分:1)

您需要使用否定的字符类而不是.*,因为.*是贪婪的,它尽可能匹配多个字符。

WHERE filters REGEXP '"job_skill":\{"label":"name","val":"[^\{\}]*(\[\[3D Designer\]\])'

[^\{\}]*匹配任何字符,但不匹配{},不等于零。或多次。