Mysql REGEXP returns 即使没有匹配项也为真。

Mysql REGEXP returns true even though there is no match.

我正在使用以下查询

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":""}}

这个查询非常适合我的需要,但是由于一些奇怪的原因,它 returns user_id 即使字段显然不包含这个值,它是 3:36 A.M我的脑子快要关机了,如果我不够清楚还请见谅

你需要使用取反字符class而不是.*,因为.*是贪心的,它会尽可能匹配更多的字符。

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

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