Функция pos()
может использоваться для сообщения (конечной) позиции матча. Пример:
my $string = 'abcdefghijk';
if($string =~ /e/g)
{
print "There is an 'e' ending at position ", pos($string), ".\n";
}
В этом коде будет напечатано: "E 'заканчивается в позиции 5." (Позиции начинаются с 0.) Добавьте к этому обычное использование скобок, и вы сможете решить свою проблему.
В дополнение к pos()
существуют также специальные глобальные массивы @-
и @+
, которые обеспечивают начальное и конечное смещения каждый подшаблон соответствует. Пример:
my $string = 'foo bar baz';
if($string =~ /(foo) (bar) (baz)/)
{
print "The whole match is between $-[0] and $+[0].\n",
"The first match is between $-[1] and $+[1].\n",
"The second match is between $-[2] and $+[2].\n",
"The third match is between $-[3] and $+[3].\n";
}
( Спасибо Чэсу. Оуэнсу за пробежку по памяти; я искал в них perlre
вместо них в perlvar
)