命名的捕获多次匹配(Perl)

Joe*_*Fan 5 regex perl

当我运行此代码时:

$_='xaxbxc';
if(/(x(?<foo>.))+/) {
    say "&: ", $&;
    say "0: ", $-{foo}[0];
    say "1: ", $-{foo}[1];
 }
Run Code Online (Sandbox Code Playgroud)

我明白了:

&: xaxbxc
0: c
1:
Run Code Online (Sandbox Code Playgroud)

我知道这是它应该如何工作,但我希望能够以某种方式得到所有匹配的列表('a', 'b', 'c')而不是最后一个匹配(c).我怎样才能做到这一点?

Eri*_*rom 5

在这种情况下,使用嵌入式代码块提供了一种简单的方法:

my @match;
$_='xaxbxc';
if(/((?:x(.)(?{push @match, $^N}))+)/) {
    say "\$1: ", $1;
    say "@match"
}
Run Code Online (Sandbox Code Playgroud)

打印:

$1: xaxbxc
a b c
Run Code Online (Sandbox Code Playgroud)