匹配花括号之间的所有内容-Regex

时间:2018-06-22 16:52:34

标签: php regex preg-match-all

我想在{},之间进行解析。我搜索并已经尝试了许多来自stackoverflow的解决方案,但并非所有解决方案都可以正常工作。

对我来说,最好的解决方案是Extracting all values between curly braces regex php,但是当嵌套花括号时,该解决方案将失败。我尝试了{\K[^}]*(?=},),例如:ID:1181不匹配。

样本数据

{
    Id: 1180
    Name: "ABCD"
    Type: 1
    Json: <"
        Some sample data
    ">
},
{
    Id: 1181
    Name: "EFGH"
    Type: 4
    More: Value
    More: Value
    Json: <"
        Some sample data "{ with more curly braces }" and "{ more curly braces }";
    ">
},
{
    Id: 1182
    Name: "IJKL"
    Type: 2
    Json: <"
        Some sample data
    ">
},

崇高的结果Result

2 个答案:

答案 0 :(得分:1)

您可以使用以下recursive regex in PHP

$regex = '/ { ( (?: [^{}]* | (?R) )* ) } /x';

RegEx Demo

答案 1 :(得分:0)

没有这种格式的规范,就没有干净的解决方案来解析输入。使用正则表达式只能部分帮助您,因为“ Json”字段中可能包含实用内容。

如果您需要快速而又肮脏的解决方案,则可以使用以下事实,即冰壶在生产线的开头。

$m = preg_split('~^},$~m', $data);

preg_match_all('/\{.*?^\},$/ms', $str, $matches, PREG_SET_ORDER);

从那里开始,您可以随意处理数据。