Something () {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}
我正在逐行阅读,我想从' Something'中获取文本块。到最后' {'
我正在使用下面的正则表达式
/ Something {/../}/
但直到这个:
Something {
X {
block of text
}
有人可以帮我用正则表达式抓取整个文本块吗?
答案 0 :(得分:3)
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 "$1\n" if $s =~ /(Something\s+$re)/;
输出
Something {
X {
block of text
}
Y{
block of text
}
Z{
block of text
}
}
答案 1 :(得分:2)
您可以使用递归子模式:
/Something \s* ( { (?: [^{}]* | (?-1) )* } )/x
但是请记住,它不会对转义的花括号起作用,如果你有不平衡的括号,它将会中断。
答案 2 :(得分:0)
看起来你只想要没有前导空格的行,即
/^Something {/ .. /^}/