当我运行此代码时:
$_='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).我怎样才能做到这一点?
在这种情况下,使用嵌入式代码块提供了一种简单的方法:
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)
| 归档时间: |
|
| 查看次数: |
1198 次 |
| 最近记录: |