在Perl 6中,正则表达式中<.before ... >
的含义是什么?
它似乎与<?before ... >
:
my $str = "Hello";
$str ~~ /<alpha> <?before 'o'>/;
say $/;
$str ~~ /<alpha> <.before 'o'>/;
say $/;
输出:
「l」
alpha => 「l」
「l」
alpha => 「l」
我想澄清一下,因为我看到了一些使用<.before ...>
的代码,我不确定它是什么意思。它可能是非法语法,也可能是负面预测<!before ...>
或正向前瞻<?before ...>
或其他内容。我知道我可以通过在<alpha>
前面放一个点来制作像<.alpha>
非捕获的规则,但是因为它们总是无法捕获而对我来说没有任何意义。在任何情况下,都应该写<.?before ... >
或<.!before ... >
来区分正面和负面的前瞻?
答案 0 :(得分:7)
<.before ...>
与<?before ...>
相同,但预示不太明显(这就是我建议使用<?before ...>
表单的原因)。
基本上,<?anything>
将anything
变为正向前瞻,而<.anything>
是非捕获子规则调用。由于before
已经是先行,并且两种形式都没有捕获,因此它们的行为相同。