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;
을,하지만 난 빈 줄에 모든 텍스트를 캡처하고 싶습니다 또는 입력 끝. 누구든지 내가 뭘 잘못하고 있는지 알 수 있니?
이<token: text> (?:(?!\n\n).)*
이 다른 줄 바꿈 다음에 줄 바꿈하지 않은 0 개 이상의 문자와 일치 :
글쎄, 당신이 잘못한 것은''에 줄 바꿈을 포함 할 수 없다는 뜻입니다. 그렇게 명확하지 않은 것은 올바른 해결책입니다. –
cjm
@cjm, 예, 좋은 지적입니다. 나는 다른 시도를 보여 줘야했다. 나는. *을 정의하기 위해을 시도했지만 그 다음 섹션을 포함하여 모든 것을 먹었다. 그래. *? 작동 할 수도 있지만 첫 줄 바꿈에서 중지되었습니다. –
@Jeff 왜냐하면'/ s '를 사용하지 않는 한'.'는'\ n'과 일치하지 않기 때문에'(? s :. *?)'가 아마도 작동 할 것입니다. 아니면. + (? : \ n. +) *'. – Qtax