我是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)
有什么想法吗? 也许是因为它很贪心,但我不确定......
提前致谢!
答案 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.