我正在运行幻灯片 15中的示例:
qr{
<data>
<rule: data> <[text]>+
<rule: text> .+
}xm;
针对多行文本运行时:
line_1
line_2
我得到:
'text' => [ 'line-1',
'
line-2' ]
到目前为止,我还没有成功摆脱捕获的第二行前面的 '\n' 。
在 Strawberry perl 5.26.1 之上运行 Regexp::Grammers 1.048。
更新/澄清 (过早地 - 抱歉!)提出了一个针对模块的错误,Damian 澄清如下(回复略有调整以匹配上面的示例):
包含空格的规则在该点匹配输入中的任何空格(包括换行符)。所以像这样的规则:
<rule: text> .+
真的相当于:
<rule: text><.ws>.+
含义:匹配但不捕获任何前导空格,然后匹配除换行符之外的任何字符。
如果您希望忽略规则中的空格(正如您在此处所希望的那样),那么您需要将规则声明为令牌。令牌没有规则的神奇“空白匹配空白”行为。因此你会写:
<token: line> .+
在这种情况下,您还需要显式地使用分隔每一行的换行符,例如:
<rule: data> <[line]>+ % \n