我有两个代码,我认为应该是等价的.第一个用于<|w>
指定字边界,其中非字字符(或字符串的开头)应该在H之前.第二个例子使用了<<
,它应该做同样的事情.
my $string = 'Hamadryas perlicus';
say $string ~~ /
<?after <|w> Hamadryas \s+ >
(\w+)
/;
say $string ~~ /
<?after << Hamadryas \s+ >
(\w+)
/;
Run Code Online (Sandbox Code Playgroud)
第一个匹配,但第二个不匹配:
?perlicus?
0 => ?perlicus?
Nil
Run Code Online (Sandbox Code Playgroud)
这两个还有其他一些区别吗?
Timotimo在 IRC 频道中的回答暗示了为什么会出现这种情况。当您使用 时after
,您实际上是在翻转正则表达式。然后你必须从右向左翻转,这样就可以了。
use v6;\n\nmy $string = \'Hamadryas perlicus\';\nsay $string ~~ /\n <?after Hamadryas <|w> \\s+ >\n (\\w+)\n /;\n\nsay $string ~~ /\n <?after Hamadryas \xc2\xab \\s+ >\n (\\w+)\n /;\n
Run Code Online (Sandbox Code Playgroud)\n\n这将产生您正在寻找的东西。
\n 归档时间: |
|
查看次数: |
177 次 |
最近记录: |