繁体   English   中英

MYSQL REGEXP在JSON字符串中搜索

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM