Встановлення внутрішніх опцій
УстановкиPCRE_CASELESS PCRE_MULTILINE PCRE_DOTALL PCRE_UNGREEDY PCRE_EXTRA PCRE_EXTENDEDи PCRE_DUPNAMES можуть бути локально визначені в шаблоні з використанням спеціальних Perl-послідовностей між символами «(?» і «)». Нижче наведено список цих опцій:
i< /code> | для PCRE_CASELESS |
m | для PCRE_MULTILINE |
s | для PCRE_DOTALL |
x | для PCRE_EXTENDED |
U | для PCRE_UNGREEDY |
X | для PCRE_EXTRA (більше не підтримується з PHP 7.3) |
J | для PCRE_INFO_JCHANGED |
Наприклад, (?im) вказує на реєстронезалежний, багаторядковий режим пошуку. Також можна скинути опцію, поставивши перед нею символ "-", або комбінувати установку та скасування режимів. Наприклад, (?im-sx) встановлює прапори PCRE_CASELESS PCRE_MULTILINE та скасовує прапори PCRE_DOTALL і PCRE_EXTENDED. Якщо символ розташований одночасно після та перед символом «-», опцію буде скасовано.
Якщо зміна опції відбувається на самому верхньому рівні (тобто поза підмаскою), зміна буде застосована до частини шаблону, що залишилася. Таким чином, /ab(?i)c/
збігається лише з «abc» та «abC».
Якщо зміна налаштування відбувається всередині підмаски, ефект буде іншим. Це зміна поведінки у Perl 5.005. Зміна опції всередині підмаски вплине тільки на частину цієї підмаски, що залишилася, тобто (a(?i)b)c
збігається тільки з «abc» і «aBc» і більше ні з чим (зрозуміло, якщо PCRE_CASELESS не увімкнуто). Це означає, що різні частини шаблону опції можуть відрізнятися. Будь-які зміни, що відбулися в одній альтернативній гілці, переносяться і в інші гілки в межах підмаски. Наприклад, (a(?i)b|c)
збігається з "ab", "aB", "c", і "C", хоча і при збігу з "C" перша гілка була відкинута до установки опції. Це тому, що встановлення всіх опцій відбувається на етапі компіляції. В іншому випадку могла бути дуже дивна поведінка.
Опції, специфічні для PCRE, такі як PCRE_UNGREEDY і PCRE_EXTRA можуть бути встановлені так само, як і Perl-сумісні опції, шляхом використання символів U і X відповідно. Прапор (?X) специфічний тим, що повинен бути розташований у шаблоні, перш ніж використовувати будь-яку іншу додаткову можливість, навіть якщо він розташований на верхньому рівні. Найкраще розміщувати прапор (?X) на самому початку шаблону.