在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 ... >
来区分积极和消极的前瞻?
<.before ...>
与<?before ...>
相同,但前瞻性不太明显(这就是我推荐使用<?before ...>
形式的原因)。
基本上,<?anything>
将anything
变为积极的前瞻,<.anything>
是一个非捕获的子规则。由于before
已经是一个先见之明,并且两种形式都没有捕获,因此它们的行为相同。