Модифікатори шаблонів

Нижче наведено всі доступні на сьогоднішній день модифікатори. Ім'я, взяте в круглі дужки, вказує на внутрішнє PCRE-ім'я для даного модифікатора. Пробіли та переклади рядків у модифікаторах ігноруються, інші символи викликають помилки.

i PCRE_CASELESS) .

Якщо цей модифікатор використовується, символи шаблону відповідають символам як верхнього, так і нижнього регістра.

m PCRE_MULTILINE) .

За замовчуванням PCRE обробляє дані як рядковий символьний рядок (навіть якщо він містить кілька роздільників рядків). Метасимвол початку рядка '^' відповідає тільки початку тексту, що обробляється, в той час як метасимвол "кінець рядка" '$' відповідає кінцю тексту, або позиції перед завершальним текстом перекладом рядка (у разі, якщо модифікатор D не встановлений). У Perl ситуація повністю аналогічна. Якщо цей модифікатор використовується, метасимволи "початок рядка" і "кінець рядка" також відповідають позиціям перед довільним символом перекладу та рядки і, відповідно, як і на самому початку і в самому кінці рядка. Це відповідає Perl-модифікатору /m. У випадку, якщо текст, що обробляється, не містить символів перекладу рядка, або шаблон не містить метасимволів '^' або '$', даний модифікатор не має жодного ефекту.

s PCRE_DOTALL) .

Якщо цей модифікатор використовується, метасимвол "точка" у шаблоні відповідає всім символам, включаючи переклад рядків. Без нього – всі символи, окрім перекладів рядків. Цей модифікатор еквівалентний запису /s Perl. Клас символів, побудований на запереченні, наприклад [^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). Це впливає тільки на те, які групи перехоплюються, як і раніше, можна використовувати нумеровані посилання на підшаблони і масив збігів, як і раніше, буде містити нумеровані результати.