当我运行此代码时:
$_='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/