@H_404_6@
我想在文件中搜索字符串,然后获取所有匹配的偏移量.
文件内容如下:
文件内容如下:
sometext sometext AAA sometext AAA AAA sometext
我正在将整个文件读入字符串$text,然后对AAA进行正则表达式匹配,如下所示:
if($text =~ m/AAA/g) { $offset = $-[0]; }
这将只给出一个AAA的偏移量.如何抵消所有比赛?
我知道我们可以使用如下语法获取数组中的所有匹配项:
我的@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 }