正则表达式perl抓取文本块

时间:2015-02-14 17:29:43

标签: regex perl

Something () {
  X {
    block of text
  }
  Y{
    block of text
  }
  Z{
     block of text
  }
}

我正在逐行阅读,我想从' Something'中获取文本块。到最后' {'

我正在使用下面的正则表达式

/ Something {/../}/

但直到这个:

Something {
  X {
    block of text
  }

有人可以帮我用正则表达式抓取整个文本块吗?

3 个答案:

答案 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

RegEx Demo

但是请记住,它不会对转义的花括号起作用,如果你有不平衡的括号,它将会中断。

答案 2 :(得分:0)

看起来你只想要没有前导空格的行,即

/^Something {/ .. /^}/