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