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

标签 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;

我只匹配本节的第一行,但我想捕获所有文本,直到空白行或输入结尾。谁能看到我在做什么错?

最佳答案

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

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

这将匹配0个或多个不是换行符的字符,然后再跟另一个换行符。这可能不是最好的解决方案,但它可以工作。

关于regex - 如何使用Regexp::Grammars匹配多行模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484813/

相关文章:

parsing - 使用属性语法装饰解析树

grammar - CFG : Why is this grammar ambiguous?

java - 使用正则表达式查找模式匹配的第 n 个实例

perl - 为什么我不应该使用UNIVERSAL::isa?

javascript - 如果输入了正确的坐标,则启用复选框

OSX Lion 升级后 perl ".../config.h, needed by ` Makefile'"不起作用

html - 我如何开始使用 Perl 进行 Web 开发?

grammar - 正则语言和正则文法的区别

python - 抓取 <b> 标签之间的 <p> 标签内的文本以及正则表达式问题

javascript - 仅匹配 unicode 字母