我正在尝试从包含以下内容的文件中提取一些信息:
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,'{}');
}
但这只能提取现场的内容。我想以某种方式递归。
有人有任何想法吗?
答案 0 :(得分:2)
你需要编写一个解析器,听起来你对解析一无所知。这种语言与JSON并不完全相同,所以我建议您复制JSON :: PP并使其适应您的语言。
或者,使用解析器构建器,例如Marpa。