3
我是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;
我只匹配部分的第一线,但我想捕获所有文字到一个空行或输入结束。任何人都可以看到我做错了什么?
那么,你做错了什么是告诉它''不能包含换行符,所以它不。不太明显的是正确的解决方案。 –
cjm
2012-07-14 18:11:45
@cjm,是的,好点。我应该显示我的其他尝试。我曾尝试将定义为。*,但已经吃掉了所有内容,包括后续章节。我虽然。*?可能会工作,但停在第一个换行符。 –
2012-07-14 18:21:05
@Jeff,因为'.'与'\ n'不匹配,除非你使用'/ s',所以'(?s:。*?)'可能会起作用。或者'。+(?:\ n。+)*'。 – Qtax 2012-07-14 19:22:53