Ниже перечислены все доступные на сегодняшний день модификаторы.
Имя, взятое в круглые скобки, указывает внутреннее 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_EVAL)
Если используется данный модификатор, preg_replace()
после выполнения стандартных подстановок в заменяемой строке
интерпретирует ее как PHP-код и использует результат для
замены искомой строки.
Одинарные и двойные кавычки, обратные слэши (\)
NULL-символы будут проэкранированы обратными слэшами в
подставляемых обратных ссылках.
Предостережение
Прежде чем подставить значение обратной ссылки, к этому значению
применяется функция addslashes. Таким образом, если обратная ссылка
используется как строка в кавычках, то экранированные символы
будут преобразованы в строковые константы. Однако проэкранированные
символы, которые обычно не должны изменяться, сохраняют примененные
к ним слэши. Это делает использование данного модификатора довольно
проблематичным.
Предостережение
Убедитесь, что параметр replacement
содержит строку с корректным PHP-кодом, иначе PHP сообщит
об ошибке парсинга на строке, содержащей вызов
preg_replace().
Замечание:
Этот модификатор используется только в функции
preg_replace(), в других PCRE функциях
он игнорируется.
A (PCRE_ANCHORED)
Если используется данный модификатор, соответствие шаблону
будет достигаться только в том случае, если он "заякорен", т.е.
соответствует началу строки, в которой производится поиск.
Того же эффекта можно достичь подходящей конструкцией с вложенным
шаблоном, которая является единственным способом реализации
этого поведения в Perl.
D (PCRE_DOLLAR_ENDONLY)
Если используется данный модификатор, метасимвол $ в шаблоне
соответствует только окончанию обрабатываемых данных. Без
этого модификатора метасимвол $ соответствует также позиции
перед последним символом, в случае, если им является перевод
строки (но не распространяется на любые другие переводы строк).
Данный модификатор игнорируется, если используется модификатор
m. В языке Perl аналогичный модификатор
отсутствует.
S
В случае, если планируется многократно использовать шаблон,
имеет смысл потратить немного больше времени на его анализ,
чтобы уменьшить время его выполнения.
В случае, если данный модификатор используется, проводится
дополнительный анализ шаблона. В настоящем это имеет смысл
только для "незаякоренных" шаблонов, не начинающихся с
какого-либо определенного символа.
U (PCRE_UNGREEDY)
Этот модификатор инвертирует жадность квантификаторов, таким
образом они по умолчанию не жадные. Но становятся жадными,
если за ними следует символ ?. Такая
возможность не совместима с Perl. Его также можно установить
с помощью (?U)
установки
модификатора внутри шаблона или добавив знак вопроса
после квантификатора (например, .*?).
Замечание:
В нежадном режиме обычно невозможно совпадение символов
превышающих pcre.backtrack_limit.
X (PCRE_EXTRA)
Этот модификатор включает дополнительную функциональность
PCRE, которая не совместима с Perl: любой обратный слэш в
шаблоне, за которым следует символ, не имеющий специального
значения, приводят к ошибке.
Это обусловлено тем, что подобные комбинации зарезервированы для
дальнейшего развития. По умолчанию же, как и в Perl, слэш
со следующим за ним символом без специального значения трактуется как опечатка.
На сегодняшний день это все возможности, которые управляются данным модификатором
J (PCRE_INFO_JCHANGED)
Модификатор (?J) меняет значение локальной опции
PCRE_DUPNAMES - подшаблоны могут
иметь одинковые имена.
u (PCRE8)
Этот модификатор включает дополнительную функциональность PCRE,
которая не совместима с Perl: шаблоны обрабатываются как UTF-8 строки.
Модификатор u доступен в PHP 4.1.0 и выше для Unix-платформ,
и в PHP 4.2.3 и выше для Windows платформ.
Валидность UTF-8 в шаблоне проверяется начиная с PHP 4.3.5.