匹配花括号之间的所有内容 - 正则表达式

Matching all contents between curly braces - Regex

我想在 {}, 之间进行解析。我搜索并尝试了很多来自 Whosebug 的解决方案,但似乎并非所有解决方案都有效。

最适合我的解决方案是 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
    ">
},

出色的结果

如果没有这种格式的规范,就没有解析输入的干净解决方案。使用正则表达式只能部分帮助您,因为 "Json" 字段中可能有任何实用的东西。

如果您需要一个快速而肮脏的解决方案,您可以使用卷曲位于行首的事实。

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

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

从那时起,您可以随心所欲地处理数据。

你可以使用这个recursive regex in PHP:

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

RegEx Demo