在 Perl 6 中访问部分匹配项

Accessing parts of match in Perl 6

当我使用命名的正则表达式时,我可以打印它的内容:

my regex rgx { \w\w };
my $string = 'abcd';

$string ~~ / <rgx> /;
say $<rgx>; # 「ab」

但是如果我要匹配:g:ex副词,那么匹配不止一个,就不行了。以下

my regex rgx { \w\w };
my $string = 'abcd';

$string ~~ m:g/ <rgx> /;
say $<rgx>; # incorrect

报错:

Type List does not support associative indexing.
  in block <unit> at test1.p6 line 5

我应该如何修改我的代码?

UPD: 基于@piojo 的 ,我修改了最后一行,解决了我的问题:

say $/[$_]<rgx> for ^$/.elems;

以下会更容易,但由于某些原因它不起作用:

say $_<verb> for $/; # incorrect

似乎 :g:overlap 是特殊情况:如果您的匹配项在正则表达式中重复出现,例如 / <rgx>* /,那么您将以 $<rgx>[0] 的形式访问匹配项], $<rgx>[1], 等等。但在这种情况下,引擎不止一次地进行整个匹配。因此,您可以通过顶级匹配运算符 $/ 访问这些匹配项。实际上,$<foo>只是$/<foo>的一个快捷方式。

所以根据报错信息,我们知道在本例中,$/是一个列表。因此我们可以访问您的匹配项 $/[0]<rgx>$/[1]<rgx>.