簡體   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