Описание модификаторов шаблонов Perl-совместимых регулярных выражений (PCRE)

Доступные PCRE-модификаторы перечислены ниже. Названия модификаторов в круглых скобках относятся к внутренним именам PCRE-выражений. Функции игнорируют пробелы и переводы строк в модификаторах, другие символы вызывают ошибку.

i (PCRE_CASELESS)
С этим модификатором символы в шаблоне соответствуют заглавным и строчным буквам.
m (PCRE_MULTILINE)
Модуль PCRE по умолчанию обрабатывает входную строку как строку, которая состоит из одной «строки» символов, даже если строка содержит переходы на новую строку. Метасимвол «начала строки» — «^» — соответствует только началу строки, тогда как метасимвол «конца строки» — «$» — соответствует только концу строки или позиции перед переводом строки, который завершает текст, если не установили модификатор D. В языке Perl ситуация аналогична. При установке этого модификатора конструкция «начало строки» соответствует позициям непосредственно после символов новой строки во входной строке и началу входной строки, а конструкция «конец строки» — позициям непосредственно после символов перевода строки и концу входной строки. Это соответствует Perl-модификатору /m. Установка этого модификатора не изменит поведение сопоставления, если входная строка не содержит символов перевода строки «\n», или шаблон не содержит метасимволов начала «^» или конца «$» строки.
s (PCRE_DOTALL)
С этим модификатором метасимвол «точка» в шаблоне соответствует всем символам, включая перевод строк. Без модификатора анализатор исключит переводы строк. Этот модификатор эквивалентен Perl-модификатору /s. Символьный класс с отрицанием, например [^a], соответствует символу перевода строки независимо от установки этого модификатора.
x (PCRE_EXTENDED)
Анализатор, если этот модификатор установили, проигнорирует в шаблоне символы пробельных данных, если пробельные символы не заэкранировали или не записали внутри символьного класса. Парсер также проигнорирует символы между неэкранированным символом «#» вне символьного класса и следующим переводом строки, включая сами символы «\n» и «#». Это эквивалентно Perl-модификатору /x и разрешает размещать комментарий в сложных шаблонах. Замечание: это касается только символьных данных. Пробельные символы не фигурируют в служебных символьных последовательностях, например, в последовательности «(?(», которая открывает условную подмаску.
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. Модификатор разрешает подшаблонам одинаковые имена. Поддержку модификатора J добавили в PHP 7.2.0.
u (PCRE_UTF8)
Модификатор включает дополнительную функциональность модуля PCRE, которая несовместима с Perl. С этим модификатором парсер обрабатывает шаблон и входную строку как строку в кодировке UTF-8. Недопустимая входная строка приводит к тому, что функции preg_* ничего не находят, а неправильный шаблон приводит к ошибке уровня E_WARNING. Пятый и шестой октеты последовательности UTF-8 рассматриваются недопустимыми.
n (PCRE_NO_AUTO_CAPTURE)
Модификатор делает простые группы (xyz) незахватываемыми. Перехватываются только именованные группы наподобие (?<name>xyz). Это влияет только на то, какие группы парсер перехватит. По-прежнему разрешено пользоваться нумерованными ссылками на подшаблоны, а массив совпадений по-прежнему будет содержать нумерованные результаты.
To Top