我怎么能找到匹配的位置正则表达式的单个字符串在Perl



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
}

相关内容

  • 没有找到相关文章

最新更新