正则表达式 perl 抓取文本块
Regular expression perl grab block of text
Something () {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}
我正在逐行阅读,我想获取从 'Something' 到最后一个 '{'
的文本块
我正在使用如下正则表达式
/某事{/../}/
但它会得到直到:
Something {
X {
block of text
}
谁能帮我用正则表达式抓取整个文本块?
您似乎只需要没有前导的行 space,即
/^Something {/ .. /^}/
您可以为此使用递归子模式:
/Something \s* ( { (?: [^{}]* | (?-1) )* } )/x
但是请记住,它不适用于转义的花括号,如果你有不平衡的括号,它会中断。
有Regexp::Common
可以匹配平衡括号,
use strict;
use warnings;
use Regexp::Common;
my $re = $RE{balanced}{-parens=>'{}'};
my $s = q[
Something {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}
];
print "\n" if $s =~ /(Something\s+$re)/;
输出
Something {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}
Something () {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}
我正在逐行阅读,我想获取从 'Something' 到最后一个 '{'
的文本块我正在使用如下正则表达式
/某事{/../}/
但它会得到直到:
Something {
X {
block of text
}
谁能帮我用正则表达式抓取整个文本块?
您似乎只需要没有前导的行 space,即
/^Something {/ .. /^}/
您可以为此使用递归子模式:
/Something \s* ( { (?: [^{}]* | (?-1) )* } )/x
但是请记住,它不适用于转义的花括号,如果你有不平衡的括号,它会中断。
有Regexp::Common
可以匹配平衡括号,
use strict;
use warnings;
use Regexp::Common;
my $re = $RE{balanced}{-parens=>'{}'};
my $s = q[
Something {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}
];
print "\n" if $s =~ /(Something\s+$re)/;
输出
Something {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}