Задача поиска последнего совпадения также
$count = 0 |
|||
s{ |
|||
\b |
|||
( |
\w+) |
||
\s+ fish |
\b |
||
Я |
|||
if |
(++$count |
== |
4) { |
sushi |
$2, |
||
} |
else { |
||
$1 |
$2 |
||
}gex |
|||
One |
fish two |
fish |
red fish sushi fish |
Другой способ — глобальный поиск в списковом контексте для получения всех совпадений и последующее извлечение нужного элемента этого списка
$pond = One fish two fish red fish blue fish swim here $color = ( $pond =~ /\b(\w+)\s+fish\b/gi )[-1], print Last fish is $color \n , Last fish is blue.
Если потребуется найти последнее совпадение без применения /д, то же самое можно сделать с отрицательной опережающей проверкой (?l НЕЧТО) Если вас интересует последний экземпляр произвольного шаблона А, вы ищете А, сопровождаемый любым количеством «не-А», до конца строки Обобщенная конструкция имеет вид А(9! *А) *$, однако для удобства чтения ее можно разделить
т{
А # Найти некоторый шаблон А
С1 # При этом не должно находиться
¦ # что-то другое А # и А )
$ # До конца строки }х
В результате поиск последнего экземпляра fish принимает следующий вид:
$pond = One fish two fish red fish blue fish if ($pond =" m{
\b ( \w+) \s+ fish \b C' * \b fish \b ) }six ) {
print Last fish is $1/\n } else <
print Failed'\n ,
}
Last fish is blue.
Такой подход имеет свои преимущества — он ограничивается одним шаблоном и потому подходит для ситуаций, аналогичных описанной в рецепте 6.17. Впрочем, имеются и недостатки. Он однозначно труднее записывается и воспринимается — впрочем, если общий принцип понятен, все выглядит не так плохо. К тому же это решение медленнее работает — для протестированного набора данных быстродействие снижается примерно в два раза.
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий