Модификаторы шаблонов
Ниже перечислены все доступные на сегодняшний день модификаторы.
Имя, взятое в круглые скобки, указывает внутреннее PCRE имя для данного модификатора.
-
i (PCRE_CASELESS)
-
Если этот модификатор используется, символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра.
-
m (PCRE_MULTILINE)
-
По умолчанию PCRE обрабатывает данные как однострочную символьную строку
(даже если она содержит разделители строк).
Метасимвол начала строки '^' соответствует только началу обрабатываемого текста,
в то время как метасимвол "конец строки" '$' соответствует
концу текста, либо позиции перед завершающим текст переводом строки
(в случае, если модификатор D не установлен).
В Perl ситуация полностью аналогична.
Если этот модификатор используется, метасимволы "начало строки" и
"конец строки" также соответствуют позициям перед произвольным символом
перевода и строки и, соответственно, после.
Это соответствует Perl-модификатору \m.
В случае, если обрабатываемый текст не содержит символов перевода строки,
либо шаблон не содержит метасимволов '^' или '$',
данный модификатор не имеет никакого эффекта.
-
s (PCRE_DOTALL)
-
Если данный модификатор используется, метасимвол "точка" в шаблоне соответствует
всем символам, включая перевод строк. Без него - всем, за исключением переводов строк.
Этот модификатор эквивалентен записи /s в Perl.
Класс символов, построенный на отрицании, например [^a], всегда соответствует
переводу строки, независимо от наличия этого модификатора.
-
x (PCRE_EXTENDED)
-
Если данный модификатор используется, неэкранированные
пробелы, символы табуляции и пустой строки
в шаблоне игнорируются, если они не являются частью символьного класса.
Также игнорируются все символы между неэкранированным символом '#'
(если он не является частью символьного класса) и символом перевода строки
(включая сами символы '\n' и '#').
Это эквивалентно Perl-модификатору \x, и позволяет размещать комментарий
в сложных шаблонах.
Замечание: это касается только символьных данных. Пробельные символы
не фигурируют в служебных символьных последовательностях, к примеру, в
последовательности '(?(', открывающей условную подмаску.
-
e
-
Если данный модификатор используется, preg_replace()
после выполнения стандартных подстановок в заменяемой строке
интерпретирует ее как PHP-код и использует результат для замены искомой строки.
Только preg_replace() реагирует на данный модификатор;
остальными функциями он игнорируется.
Замечание:
Этот модификатор недоступен в PHP 3.
-
A (PCRE_ANCHORED)
-
Если данный модификатор используется, соответствие шаблону
будет достигаться только в том случае, если он
соответствует началу строки, в которой производится поиск.
Того же эффекта можно достичь подходящей конструкцией с вложенным
шаблоном, которая реализуема в Perl.
-
D (PCRE_DOLLAR_ENDONLY)
-
Если данный модификатор используется, метасимвол $ в шаблоне
соответствует только окончанию обрабатываемых данных. Без этого модификатора
метасимвол $ соответствует также позиции перед последним символом, в случае,
если им является перевод строки (но не распространяется на любые другие переводы строк).
Данный модификатор игнорируется, если используется модификатор m.
В языке Perl аналогичный модификатор отсутствует.
-
S
-
В случае, если планируется многократно использовать шаблон,
имеет смысл потратить немного больше времени на его анализ,
чтобы уменьшить время его выполнения.
В случае, если данный модификатор используется, проводится дополнительный анализ шаблона.
В настоящем это имеет смысл только для фиксированных шаблонов,
не содержащих переменных ссылок.
-
U (PCRE_UNGREEDY)
-
Этот модификатор инвертирует жадность квантификаторов, таким
образом они по умолчанию не жадные. Но становятся жадными,
если за ними следует символ '?'. Такая возможность не совместима с Perl.
Модификатор U также может использоваться внутри шаблона,
при помощи '?U' записи.
-
X (PCRE_EXTRA)
-
Этот модификатор включает дополнительную функциональность PCRE,
которая не совместима с Perl: любой обратный слеш в шаблоне, за которым следует
символ, не имеющий специального значения, приводят к ошибке.
Это обусловлено тем, что подобные комбинации зарезервированы для
дальнейшего развития. По умолчанию же, как и в Perl, слеш со следующим за ним
символом без специального значения трактуется как as опечатка.
На сегодняшний день это все возможности, которые управляются данным модификатором
-
J (PCRE_INFO_JCHANGED)
-
Модификатор (?J) меняет значение опции PCRE_DUPNAMES - подшаблоны могут
иметь одинковые имена.
-
u (PCRE_UTF8)
-
Этот модификатор включает дополнительную функциональность PCRE,
которая не совместима с Perl: шаблоны обрабатываются как UTF8 строки.
Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ,
и в PHP 4.2.3 и выше для Windows платформ.
Валидность UTF8 в шаблоне проверяется начиная с PHP 4.3.5.
|
|