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


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


Модификаторы

Модификаторы, используемые при поиске по шаблону, намного проще перечислить и понять, чем другие метасимволы. Ниже приведена краткая сводка:

/i      Игнорировать регистр (с учетом национальных алфавитов).

/х      Игнорировать большинство пропусков в шаблонах и разрешить коммен­тарии.

/д       Глобальный модификатор — поиск/замена выполняются всюду, где это возможно.


Введение   183

/gc     He сбрасывать позицию при неудачном поиске.

/s Разрешить совпадение . с переводом строки; кроме того, игнорировать ус­таревшее значение $*.

/т Разрешить совпадение " и $ соответственно для начала и конца строки во внутренних переводах строк.

/о      Однократная компиляция шаблонов.

/е      Правая часть s/// представляет собой выполняемый код.

/ее Правая часть s/// выполняется, после чего возвращаемое значение ин-терпретируеся снова.

Наиболее распространены модификаторы /i и /д. Шаблон /ram/i совпадает со строками ram , RAM , Ram и т. д. При наличии этого модификатора обратные ссыл­ки проверяются без учета регистра (пример приведен в рецепте 6.16) При вызо­ве директивы use locale в сравнениях будет учитываться состояние текущих ло­кальных настроек. В текущей реализации модификатор /i замедляет поиск по шаблону, поскольку подавляет некоторые оптимизации скорости.

Модификатор /д используется с s/// для замены всех найденных совпадений, а не только первого Кроме того, /д используется с т// в циклах поиска (но не за­мены!) всех совпадений:

while (m/(\d+)/g)   {

print    Found number $1\n }

В списковом контексте /g извлекает все совпадения в массив-

©numbers = m/(\d+)/g

В этом случае будут найдены только неперекрывающиеся совпадения. Для по­иска перекрывающихся совпадений придется идти на хитрость — организовать опережающую проверку нулевой ширины с помощью конструкции С?= ). Раз ширина равна нулю, механизм поиска вообще не смещается вперед. При этом найденные данные сохраняются внутри скобок. Однако Perl обнаруживает, что при наличии модификатора /д мы остались на прежнем месте, и перемещается на один символ вперед.




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