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