3

我是 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;

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

4

1 回答 1

1

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

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

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

于 2012-07-14T18:28:58.123 回答