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


Синтаксис регулярных выражений - часть 9


Допустим, необходимо определить, оканчивается ли длинный текст на символы «Хх». При обычном шаблоне /Хх$/ проверка будет проходить от начала текста (сначала будет искаться символ, а потом определяться, стоит ли он в конце). Если усложнить шаблон до Г(. .*)Хх$/, это не сильно ускорит обработку, так как большую часть времени будет перебираться повторение первого подшаблона, и только потом определяться окончание текста. Если же написать шаблон как: /А(?>.*)(?<=Хх}$/, то первый подшаблон сразу же захватит весь текст целиком, а затем будет проверено окончание.

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

(? (условие) подшаблон!) или (?(условие)подшаблон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

 

Предварительная оптимизация шаблона перед исполнением

<


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



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