我期待对序列化数据进行数据库搜索。我目前正在使用Symfony2作为我的框架使用Doctrine 2进行pdo_mysql调用。我想要做的是创建一个使用REGEXP查找数组的certian部分内的数据的查询。我想在其中搜索的数据如下所示: -
a:1:{s:8:"bedrooms";a:5:{i:0;i:1;i:1;i:2;i:2;i:3;i:3;i:4;i:4;s:2:"5+";}}
所以,让我说我正在寻找有3间卧室的记录,然后我希望它能找到: -
i:2;i:3
到目前为止我提出的问题是: -
SELECT * FROM table WHERE field_name REGEXP '.*"bedrooms"; a:[0-9]+:{i:[0-9]+;i:3;}.*';
然而,这不起作用。有人可以帮我找到解决方案吗?我认为这与正则表达式的编写方式有关。
此外值得注意的是,该字段中还存储了其他数据,如信用额度和其他数据。
提前谢谢。
答案 0 :(得分:2)
我相信你可以借助与任何字符相匹配的否定字符类[^{}]
,而不是{
和}
:
.*"bedrooms";a:[0-9]+:[{][^{}]*i:[0-9]+;i:3[^{}]*[}]
请参阅regex demo
答案 1 :(得分:0)
我发现至少有2个错误和你可以做的改进
首先,在正则表达式中删除"bedrooms";
之后的空格
你应该像\{
和\}
这样的大括号,因为它们不是正则表达式引擎的文字
如果您对字符串中的特定块感兴趣,则必须将其指定为一个组,并告知其周围的字符类型,例如
"卧室&#34 ;;一个:[0-9] +:\ {*(I:[0-9]; I:3)。* \}
在这种情况下寻找i:*:i:3
,其中*是任何数字