【发布时间】:2012-07-14 03:35:54
【问题描述】:
我是 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>不能包含换行符,所以它不包含。不那么明显的是正确的解决方案。 -
@cjm,是的,好点。我应该展示我的其他尝试。我曾尝试将
定义为 .*,但这吞噬了所有内容,包括后续部分。我虽然.*?可能有效,但在第一个换行符处停止。 -
@Jeff,因为
.不匹配\n,除非你使用/s,所以(?s:.*?)可能会起作用。或者.+(?:\n.+)*.
标签: regex perl grammar regexp-grammars