Учебник по основам PHP. PHPBeginner


         

необходимо определить, оканчивается ли длинный


Допустим, необходимо определить, оканчивается ли длинный текст на символы «Хх». При обычном шаблоне /Хх$/ проверка будет проходить от начала текста (сначала будет искаться символ, а потом определяться, стоит ли он в конце). Если усложнить шаблон до Г(. .*)Хх$/, это не сильно ускорит обработку, так как большую часть времени будет перебираться повторение первого подшаблона, и только потом определяться окончание текста. Если же написать шаблон как: /А(?>.*)(?<=Хх}$/, то первый подшаблон сразу же захватит весь текст целиком, а затем будет проверено окончание.
Последней замечательной особенностью регулярных выражении являются условные структуры, позволяющие выбирать подходящий под-шаблон в зависимости от результатов поиска. Они записываются так:
(? (условие) подшаблон!) или (?(условие)подшаблон1|подшаблон2).
При выполнении условия используется первый подшаблон, в противном случае (если он указан) — второй. Условия бывают двух типов.
Если условием является числовая последовательность, то условие верно при нахождении подшаблона с указанным номером, то есть когда существует непустая ссылка с таким номером. Например, следующий шаблон разделяет текст со скобками (невложенными):
/ ( ( \( )? # необязательная открывающая скобка ( [*()]+ ) # все. кроме скобок С?(2) \) )# если была открывающая скобка, должна быть закрывающая )+ I повторим? /х
Если условие нечисловое, то это должна быть сложная претензия. Например, следующий шаблон ищет десятичное число либо шест-надцатеричное (с префиксом х):
/ (?(?=х) # если префикс х [\da-fA-F]+ # то шестнадцатеричное число Синтаксис регулярных выражений (PCRE) I \d+ # иначе - десятичное ) /x
Модификаторы
Функционирование регулярных выражений можно видоизменять модификаторами трех уровней: глобальными, внешними и внутренними.

Модификатор Внутреннее имя Воздействие
i PCRE_CASELESS Игнорировать регистр
S PCRE_DOTALL Точка = [\0-\xFF], а не [А\п]
и PCRE_UNGREEDY Минимизировать числитель
га PCRE_MULTILINE А, $ учитывают \п
D PCRE_DOLLAR_ENDONLY $ не учитывает \п
А PCRE_ ANCHORED Привязать шаблон к началу текста
е Только для preg_rep!ace()
X PCRE_EXTENDED Разрешить комментарии: пробел и #
X PCRE_EXTRA Воспринимать неверную подстановку как ошибку
S   Предварительная оптимизация шаблона перед исполнением
<

Содержание  Назад  Вперед