MYSQL REGEXP在JSON字符串中搜索

时间:2011-09-23 12:24:15

标签: mysql regex json

我是regexp的初学者,我尝试搜索json格式的文本,但我无法使其正常工作:

SELECT DISTINCT tag, body FROM pages 
WHERE (body REGEXP BINARY '"listeListeOuiNon":".*1.*"')

它显示为

的结果文本

"listeListeOuiNon":"1"

"listeListeOuiNon":"1,2"

"listeListeOuiNon":"0,1" as expected

还有"listeListeOuiNon":"2" (not expected)

有什么想法吗? 也许是因为它很贪心,但我不确定......

提前致谢!

3 个答案:

答案 0 :(得分:2)

嗯,调试非常简单:

SELECT '"listeListeOuiNon":"2"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'

返回0

SELECT '"listeListeOuiNon":"1"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'

返回1

SELECT '"listeListeOuiNon":"1,2"' REGEXP BINARY '"listeListeOuiNon":".*1.*"'

返回1

所以有些东西不适合你...因为它无法返回身体等于"listeListeOuiNon":"2"的行。但有可能,该机构有几个这样的陈述,如:

body => '“listeListeOuiNon”:“1,2”,“listeListeOuiNon”:“2”'

所以你必须修改你的正则表达式:

'^"listeListeOuiNon":".*1.*"$'

那么你必须修改你的查询:

SELECT DISTINCT tag, body FROM pages WHERE (body REGEXP BINARY '"listeListeOuiNon":".*1.*"') AND NOT (body REGEXP BINARY '"listeListeOuiNon":"2"')

答案 1 :(得分:1)

我会尝试将.*替换为[^"]* ...但是,如果您的listeListeOuiNon不能包含",或者您还必须处理转义序列。基本上使用.,您将匹配在1之后具有"listListOuiNon":"“的任何JSON字符串,即使它位于另一个字段中,是的,那是因为它是贪婪的。

答案 2 :(得分:1)

返回0.

enter image description here