使用正则表达式在查询中搜索json类型的字符串


search inside json kind of string in query using regular expression

我有类似{"A":["3", "4", "5", "6"],"B":["3", "4", "5", "6"],"C":[{"2":"y"},{"3":"y"},{"4":"y"},{"5":"y"}],"D":["3", "4", "5", "6"]} 的字符串

我想在B数组中搜索"5",意思是"5",而不是在mysql查询中搜索。

的正则表达式是什么

Mark Baker几乎为您解答了这个问题:PHP已经有了解码json字符串的方法。这比解析自己更容易:

http://php.net/manual/en/function.json-decode.php

编辑:我看到你的评论,这些信息存储在数据库中。在这种情况下,我不会将json字符串直接存储在数据库中。将所有信息放在一列中,有点违背了关系数据库的目的。

简单有效的解决方案是REGEXP '.*"B":''[["0-9,]*"5"["0-9,]*'']'

由于它是json,请使用json_decode:

$str = '{"A":["3", "4", "5", "6"],"B":["3", "4", "5", "6"],"C":[{"2":"y"},{"3":"y"},{"4":"y"},{"5":"y"}],"D":["3", "4", "5", "6"]}';
$obj = json_decode($str);
echo $obj->{'B'}[2];

输出:

 5

您可以尝试以下操作:

REGEXP '"B":'[([^"']]")*5"'