if (my @matches = $input_string =~ /$metadata[$_]{"pattern"}/g) {
print $-[1] . "\n"; # this gives me error uninitialized ...
}
Run Code Online (Sandbox Code Playgroud)
print scalar @matches;给我4,这没关系,但是如果我$-[1]用来开始第一场比赛,它就会给我带来错误.哪里有问题?
EDIT1:我如何在字符串中获得每场比赛的位置?如果我有字符串"ahoj ahoj ahoj"和regexp/ahoj/g,我怎么能在字符串中获得每个"ahoj"的开头和结尾的位置?
该阵列@-包含最后成功匹配的(在开始的偏移量$-[0])和任何捕获有可能已经在那场比赛(在偏移$-[1],$-[2]等).
您的字符串中没有捕获,因此只有$-[0]有效,并且(在您的情况下)最后一次成功匹配是第四次,因此它将包含模式的第四个实例的偏移量.
获得个别比赛抵消的方法是写
my @matches;
while ("ahoj ahoj ahoj" =~ /(ahoj)/g) {
push @matches, $1;
print $-[0], "\n";
}
Run Code Online (Sandbox Code Playgroud)
产量
0
5
10
Run Code Online (Sandbox Code Playgroud)
或者如果你不想要个别匹配的字符串,那么
my @matches;
push @matches, $-[0] while "ahoj ahoj ahoj" =~ /ahoj/g;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
865 次 |
| 最近记录: |