序列化数据中的正则表达式

时间:2016-01-29 17:19:41

标签: php regex symfony serialization doctrine

我期待对序列化数据进行数据库搜索。我目前正在使用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;}.*';

然而,这不起作用。有人可以帮我找到解决方案吗?我认为这与正则表达式的编写方式有关。

此外值得注意的是,该字段中还存储了其他数据,如信用额度和其他数据。

提前谢谢。

2 个答案:

答案 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,其中*是任何数字