如何使用Regexp :: Grammars匹配多行模式?

时间:2012-07-14 15:07:47

标签: regex perl grammar regexp-grammars

我是Regexp :: Grammars的新手,我在匹配多线模式时遇到了麻烦。我有这个输入:

my $text = <<EOD;
HEADER:
This is a multi-line section, because the
second line is down here.

EOD

和这个语法:

use Regexp::Grammars;
my $parser = qr{
  <nocontext:>
  <doc>
  <rule: doc>           <[section]>+
  <rule: section>       <label> : <text> (\n\n | $)
  <token: label>        [A-Z0-9_&/ -]+
  <token: text>         [^\n]*
}xms;

我只匹配该部分的第一行,但我想将所有文本捕获到空白行或输入结束。谁能看到我做错了什么?

1 个答案:

答案 0 :(得分:1)

一种解决方案是按如下方式更改<text>

<token: text>         (?:(?!\n\n).)*

这匹配0个或更多不是换行符后跟另一个换行符的字符。它可能不是最好的解决方案,但它确实有效。