我正在尝试使用Text :: Balanced perl模块来提取括在大括号中的文本。在这种特殊情况下,输入是bind
配置文件/etc/named.conf
,但我正在寻找一般用途。
问题是,我得到undef
结果,结果是未初始化的值错误。
这是我的代码(它现在只是一个树桩,还没有处理递归和其他东西):
#!/usr/bin/env perl
use strict;
use diagnostics;
use Text::Balanced qw (
extract_bracketed
) ;
my $config = '/etc/named.conf';
open my $fh, '<', $config or die "Cannot open $config: $!";
$/ = undef;
my $text = <$fh>;
close $fh;
my $content = extract_bracketed( $text, '{}' );
print $content ;
我已阅读http://perldoc.perl.org/Text/Balanced.html并且无法弄清楚,我做错了什么(我使用标量变量代替数组,但这应该不是问题)
此处也有一个类似的问题Text::Balanced and multiline xml,但它的回答方式不符合我的用例(.xml解析的特定解决方案)
请告知
由于
答案 0 :(得分:0)
在正则表达式中,你可以使用它:
my $str = '
<statement-1> ["<statement-1-name>"] [<statement-1-class>] {
{ {<option-1>;}
<option-2>;}
<option-N>;
};
<statement-2> ["<statement-2-name>"] [<statement-2-class>] {
<option-1>;
<option-2>;
<option-N>;
};
<statement-N> ["<statement-N-name>"] [<statement-N-class>] {
<option-1>;
<option-2>;
<option-N>;
};';
print "L: $1\n" while($str=~m/\{((?:[^{}]++|\{(?1)\})++)\}/gs);