Ano*_*eek 5 regex perl match offset
我想在文件中搜索字符串,然后获取所有匹配的偏移量.文件内容如下:
sometext
sometext
AAA
sometext
AAA
AAA
sometext
我正在将整个文件读入一个字符串$text,然后执行正则表达式匹配,AAA如下所示:
if($text =~ m/AAA/g) {
    $offset = $-[0];
}
这将只有一个偏移AAA.如何抵消所有比赛?
我知道我们可以使用如下语法获取数组中的所有匹配项:
my @matches = ($text =~ m/AAA/g);
但我想要偏移不匹配的字符串.
目前我使用以下代码来获取所有匹配的偏移量:
my $text= "sometextAAAsometextAAA";
my $regex = 'AAA';
my @matches = ();
while ($text =~ /($regex)/gi){
    my $match = $1;
    my $length = length($&);
    my $pos = length($`);
    my $start = $pos + 1;
    my $end = $pos + $length;
    my $hitpos = "$start-$end";
    push @matches, "$match found at $hitpos ";
}
print "$_\n" foreach @matches;
但有更简单的方法吗?
我不认为 Perl 中有内置的方法可以做到这一点。但是从How can I find the location of a regex match in Perl? :
sub match_all_positions {
    my ($regex, $string) = @_;
    my @ret;
    while ($string =~ /$regex/g) {
        push @ret, [ $-[0], $+[0] ];
    }
    return @ret
}