当我使用命名的正则表达式时,我可以打印其内容:
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&#39; s explanation,我修改了最后一行,如下所示,这解决了我的问题:
say $/[$_]<rgx> for ^$/.elems;
以下会更容易,但由于某些原因它不起作用:
say $_<verb> for $/; # incorrect
答案 0 :(得分:5)
似乎:g
和:overlap
是特殊情况:如果您的匹配在正则表达式中重复,例如/ <rgx>* /
,那么您将以$<rgx>[0]
的形式访问匹配项, $<rgx>[1]
等等。但在这种情况下,引擎不止一次地进行整场比赛。因此,您可以通过顶级匹配运算符$/
访问这些匹配项。事实上,$<foo>
只是$/<foo>
的快捷方式。
因此,根据错误消息,我们知道在这种情况下,$/
是一个列表。因此,我们可以$/[0]<rgx>
和$/[1]<rgx>
访问您的匹配。