以my $string = "XXXXXTPXXXXTPXXXXTP";
为例如果我想多次匹配:$string =~ /TP/;
并返回每次的位置,我该怎么做?
我试过$-[0]
, $-[1]
, $-[2]
,但我只得到$-[0]
的位置。
编辑:我也尝试了全局修饰符//g
,它仍然不起作用。
$-[1]
是第一次捕获的文本的位置。你的模式没有捕获
通过在标量上下文中调用//g
,只找到下一个匹配,允许您获取该匹配的位置。直到找到所有匹配项为止。
while ($string =~ /TP/g) {
say $-[0];
}
当然,您也可以简单地将它们存储在变量中。
my @positions;
while ($string =~ /TP/g) {
push @positions, $-[0];
}
你可以试试:
use feature qw(say);
use strict;
use warnings;
my $str = "XXXXXTPXXXXTPXXXXTP";
# Set position to 0 in order for G anchor to work correctly
pos ($str) = 0;
while ( $str =~ /G.*?TP/s) {
say ($+[0] - 2);
pos ($str) = $+[0]; # update position to end of last match
}