Я хочу найти файл для строки, а затем получить смещения для всех совпадений. Содержимое файла показано ниже:
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;
Но есть ли более простой способ для этого?