[英]MYSQL REGEXP search in JSON string
我是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)
任何想法? 也许是因为它很贪心,但我不确定......
提前致谢!
嗯,它很容易调试:
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":"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"')
我会尝试更换两个.*
与[^"]*
...这将然而,仅是足够的,如果你的listeListeOuiNon
不能包含litteral "
S,或者你也必须处理转义序列。 基本上就是.
你将匹配任何一个JSON字符串,它具有1
“之后” "listListOuiNon":"
,即使它在另一个字段中,是的,那是因为它太贪婪了。
返回0。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.