当我运行此代码时:

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

我得到:
&: xaxbxc
0: c
1:

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

最佳答案

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

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

打印:
$1: xaxbxc
a b c

关于regex - 匹配多次的命名捕获(Perl),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4258532/

10-12 07:27