Perl Regexp从嵌套括号中提取字符串

时间:2015-11-26 13:17:04

标签: perl parsing nested extract

我正在尝试从包含以下内容的文件中提取一些信息:

field {
    a:"bb"
    c:"dd"
    field_param {
        x:"xx"
        y:"yy"
    }
    other_param {
        z:"ee"
    }
    abc_param {
        x: { abc: "value"; cfg:"value"}
        ze: "value"
    }
}

field {
    a:"bb"
    c:"dd"
    field_param {
        x:"xx"
        y:"yy"
    }
    others_param {
        z:"ee"
    }
}

在文本文件中有更多fields如上所述。并非所有fields都是相同的格式,有些具有不同的参数。

我试图为每个field提取,将其视为具有变量和值的对象。问题是嵌套{} 在fields中拆分所有文件后,我不知道如何在{}之间提取值。我正在使用field field,但如果我想以递归的方式提取括号之间的内容,则无效。

直到现在我做了类似的事情:

 open(FILE,"myfile.txt")
    while(<FILE>)
    {
    $text .=$_;
    }
    close(FILE)
    my @fields= split /fields/,$text;
    for my $field(@fields)
    {
    my($extracted,$remainder)=extracted_bracketed($field,'{}');
    }

但这只能提取现场的内容。我想以某种方式递归。

有人有任何想法吗?

1 个答案:

答案 0 :(得分:2)

你需要编写一个解析器,听起来你对解析一无所知。这种语言与JSON并不完全相同,所以我建议您复制JSON :: PP并使其适应您的语言。

或者,使用解析器构建器,例如Marpa