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>1つの解決策は、次のように変更することです。

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

これは、改行の後に別の改行が続くものではない0個以上の文字に一致します。これはおそらく最善の解決策ではありませんが、機能します。

于 2012-07-14T18:28:58.123 に答える