ファイルで文字列を検索してから、すべての一致のオフセットを取得したいと思います。ファイルの内容は以下のとおりです。
sometext
sometext
AAA
sometext
AAA
AAA
sometext
このファイル全体を文字列に読み込んでから、次のよう$text
に正規表現の一致を実行しAAA
ています。
if($text =~ m/AAA/g) {
$offset = $-[0];
}
これにより、1つのオフセットのみが得られ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;
しかし、これを行うためのより簡単な方法はありますか?