2011-09-23 64 views
1

我在正则表达式初学者,我尝试在JSON格式的文本进行搜索,但我不能使它工作的权利:MYSQL REGEXP搜索

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

谨慎只是一个字,MySQL的正则表达式是一个非常* *昂贵的操作。如果可以摆动它,通常可以将可以分成几个LIKE语句的语句分开。 此外,这是一个常见的查询或匹配的文本会经常更改吗? – Nick

+0

是的,我知道我喜欢更快,但实际上匹配文本正在改变,并尝试用LIKE'“listeListeOuiNon”:“%1%”'并不是更好.. – mrflos

+0

你可以给我们一个示例行,其中“listeListeOuiNon”: “2”是否匹配? – Nick

回答

1

我会尝试用[^"]*替换这两个.* ...然而,只有当您的listeListeOuiNon不能包含点燃的"时,您才需要这样做,否则您还必须处理转义序列。基本上与.,你会匹配任何JSON字符串,它具有1“之后”"listListOuiNon":",即使它在另一个领域,是的,那是因为它是贪婪的。

+0

waouw !它似乎工作! SELECT'“listeListeOuiNon”:“2”,“listeToto”:“1”'REGEXP BINARY'“listeListeOuiNon”:“[^”] * 1 [^“] *”'等于0! merci beaucoup! – mrflos

+0

Pas deproblème...;) – Romain

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"的行。但它有可能,该机构有几个这些语句,是这样的:

体=> ' “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"')

+0

谢谢Jauzsika,但实际上我有复杂的数据,例如:{“bf_titre”:“Veille partage”,“listeListeLogiciel”:“BAZ”,“listeListeEtatDuBug”:“CONF”,“listeListeBugs”:“USER”,“listeListeOuiNon”:“2”,“bf_sauveur”:“ “,”id_typeannonce“:”31“,”createur“:”Anonyme“,”categorie_fiche“:”Maintenance du site“,”date_creation_fiche“:”2011-08-30 14:20:09“,”date_debut_validite_fiche“:” 2011-08-30“,”date_fin_validite_fiche“:”0000-00-00“,”statut_fiche“:”1“,”id_fiche“:”VeillePartagee“} < - 为此它不起作用.. – mrflos

1

返回0

enter image description here

+0

我的问题是,有更多的我的JSON文本..:SELECT'“listeListeOuiNon”:“2”,“listeToto”:“1”'REGEXP BINARY'“listeListeOuiNon”:“ * 1 *“” – mrflos