< .before ...&gt ;?的含义是什么?

时间:2018-03-01 09:16:47

标签: perl6

在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 ... >来区分正面和负面的前瞻?

1 个答案:

答案 0 :(得分:7)

<.before ...><?before ...>相同,但预示不太明显(这就是我建议使用<?before ...>表单的原因)。

基本上,<?anything>anything变为正向前瞻,而<.anything>是非捕获子规则调用。由于before已经是先行,并且两种形式都没有捕获,因此它们的行为相同。