PERL: БИБЛИОТЕКА ПРОГРАММИСТА


PERL: БИБЛИОТЕКА ПРОГРАММИСТА - стр. 182



190   Глава 6 • Поиск по шаблону

щей строки. Поскольку выражение будет интерпретировано как программный код, оно может содержать комментарии. Это несколько замедляет работу програм­мы, но не так сильно, как может показаться (пока вы не начали писать собствен­ные тесты, желательно представлять себе эффективность тех или иных конструк­ций). Дело в том, что правая сторона подстановки проверяется и компилируется на стадии компиляции вместе со всей программой. Для простой замены строк это, пожалуй, перебор, но в более сложных случаях работает просто замеча­тельно.

Удвоение /е напоминает конструкцию eval STRING . Это позволит применить лексические переменные вместо глобальных в предыдущем примере с заменой.

s/                          #  Заменить

\#                       #      знак фунта

(\w+)                  #      имя переменной

\#                       Я      еще один знак фунта

/ $       $1/хеед      #  значением «любой* переменной

После подстановки /ее проверьте переменную $@ Она содержит сообщения об ошибках, полученные в результате работы вашего кода, — в отличие от /е, в дан­ном случае код действительно генерируется во время работы программы.

> Смотри также---------------------------------------------------------------------------------------------

Описание модификатора /х в perlre(l).

6.5. Поиск N-ro совпадения

Проблема

Требуется найти не первое, a N-e совпадение шаблона в строке. Допустим, вы хоти­те узнать, какое слово предшествует третьему экземпляру слова fish:

One  fish  two  fish   red  fish  blue  fish

Решение

Воспользуйтесь модификатором /g и считайте совпадения в цикле while:

$WANT = 3, Scount = О

while (/(\w+)\s+fish\b/gi) { if (++$count == $WANT) {

print The third fish is a $1 one \n ,

# Предупреждение не выходите из этого цикла с помощью last

The third  fish  is  a   red  one.

Или воспользуйтесь счетчиком и шаблоном следующего вида:

/С \w+\s+fish\s+){2}(\w+)\s+fish/i,


6.5. Поиск N-го совпадения    191




Начало  Назад  Вперед



Книжный магазин