Php екранують послідовності
екранувальні послідовності
Зворотна коса риска (# '\ #') має кілька застосувань. Перш за все, якщо вона передує НЕ буквено-цифрового символу, вона знімає з нього спеціальне значення, яке він міг мати. Застосування зворотного косою риси як екрануючого символу допустимо як в символьному класі, так і поза ним.
Наприклад, якщо ви хочете поставити відповідність символу "*", в шаблоні необхідно вказати "\ *". Це запобіжить трактування подальшого символу як метасимвола з особливим значенням. Завжди безпечно екранувати НЕ буквено-цифрові символи за допомогою "", якщо ви хочете переконатися, що вони означають в шаблоні самих себе. В окремому випадку для зіставлення з самим символом зворотної косої межі, використовуйте запис "".
PHP-рядки. укладені в одинарні та подвійні лапки, інтерпретують зворотну косу риску по-різному. Тому, якщо необхідно збіг \ формальному виразу \\, в PHP-коді потрібно використовувати "\\" або # '\\\\ #'.
У разі, якщо зазначений модифікатор PCRE_EXTENDED. пробільні символи в шаблоні (поза описом символьного класу) ігноруються. Також ігнорується частина рядка, що знаходиться між символом "#" (знову ж таки, не бере участь в описі символьного класу) і наступним символом переведення рядка. В такому випадку зворотний слеш можна застосовувати як екранує символ для вказівки входжень символів пробілів або символу "#" в шаблоні.
Якщо бути більш точним, комбінація "\ cx" інтерпретується наступним чином: якщо "x" - символ нижнього регістра, він перетворюється в верхній регістр. Після цього шостий біт символу (шістнадцятковий код 40) інвертується. Таким чином "\ cz" інтерпретується як шістнадцяткове значення 1A, в той час як "\ c" отримує шістнадцяткове значення 3B, а "\ c;" - 7B.
Після "\ x" зчитуються ще дві шістнадцяткові цифри (вони можуть бути записані в нижньому або верхньому регістрі). У режимі UTF-8. дозволяється використання "\ x", де вміст дужок є рядком з шістнадцяткових цифр. Вона інтерпретується як символ UTF-8 character з кодом, що збігається з даними шістнадцятковим числом. Вихідна шестнадцатеричная екрануюча послідовність, \ xhh. збігається з двухбайтное UTF-8 символом, якщо його значення перевищує 127.
Після "\ 0" зчитуються дві восьмеричні цифри. Якщо в запису менше двох цифр, будуть використані всі фактично присутні цифри. Таким чином, послідовність "\ 0 \ x \ 07" буде інтерпретована як два бінарних нуля, за якими слід символ оповіщення (дзвінок). У разі, якщо ви використовуєте уявлення числа в вісімковому коді, переконайтеся, що за початковим нулем слідують дві значущі цифри.
Усередині символьного класу, або якщо отримане значення більше 9 і відповідну кількість попередніх подмасок відсутня, PCRE зчитує до трьох вісімкових цифр, наступних за зворотним слешем, і генерує один байт з останніх 8-ми значущих бітів отриманого значення. Усі наступні цифри позначають себе ж. наприклад:
Слід пам'ятати, що восьмеричні значення, що перевищують 100, слід писати без лідируючого нуля, так як Новомосковскется не більше трьох вісімкових цифр.
Все послідовності, що визначають однобайтное значення, можуть зустрічатися як всередині, так і поза символьних класів. Крім того, всередині символьного класу запис "\ b" інтерпретується як символ повернення (# 'backspace #', шістнадцятковий код 08). Поза символьного класу вона має інше значення (яке саме, описано нижче).
Третє використання зворотного слеша - вказівка загального типу символів:
\ D будь-яка десяткова цифра \ D будь-який символ, крім десяткової цифри \ h будь горизонтальний символ пробілу (починаючи з версії PHP 5.2.4) \ H будь-який символ, який не є горизонтальним пробільним символом (починаючи з версії PHP 5.2.4) \ s будь символ пробілу \ S будь непробельний символ \ v будь-вертикальний символ пробілу (починаючи з версії PHP 5.2.4) \ V будь-який символ, який не є вертикальним пробільним символом (починаючи з версії PHP 5.2.4) \ w будь-який символ, який утворює "слово" \ W Будь-який символ, що не утворює "слово"
Кожна пара таких спеціальних послідовностей ділить повне безліч всіх символів на два непересічних безлічі. Будь-який символ відповідає одному і тільки одному безлічі з пари.
Наступні символи вважаються як "пробільні": HT (9), LF (10), FF (12), CR (13), і пробіл (32). Проте, якщо йде Локаль-залежний пошук, і станеться збіг з символами в діапазоні 128-255, вони також будуть сприйняті як пробільні, наприклад NBSP (A0).
Символ, який утворює "слово" - це довільна цифра, буква або символ підкреслення, простіше кажучи, будь-який символ, який може бути частиною "слова" в Perl. Визначення букв і цифр управляється символьними таблицями, з якими була зібрана PCRE. І, як наслідок, ці набори можуть відрізнятися в різних локалізованих дистрибутивах. Наприклад, в локалі "fr" (Франція) деякі символи з кодом вище 128 використовуються для запису ударних символів і, відповідно, відповідають масці \ w.
Описані вище типи символів можуть застосовуватися як всередині, так і поза символьних класів, і відповідають одному символу даного типу. Якщо поточна точка порівняння знаходиться в кінці рядка, жоден з них не зможе співпасти, так як немає символу, з яким могло б статися збіг.
Четверте використання зворотного слеша - визначення деяких формальних тверджень, що описують умови щодо місця розташування особливих позицій у рядку і абсолютно не зачіпають самі символи. Використання подмасок як більш складних формальних тверджень описано нижче. Такими керуючими послідовностями є:
\ B межа слова \ B не є кордоном слова \ A початок даних (незалежно від многострочного режиму) \ Z кінець даних або позиція перед останнім перекладом рядка (незалежно від многострочного режиму) \ z кінець даних (незалежно від многострочного режиму) \ G перша збігається позиція в рядку
Описані вище послідовності не можуть зустрічатися в символьних класах (виключаючи комбінацію "\ b", яка всередині класу означає символ повернення # 'Backspace #').
Кордоном слова вважається така позиція в рядку, в якій з поточного та попереднього символу тільки один відповідає \ w або \ W (тобто один з них відповідає \ w. А інший \ W). Початок або кінець рядка також відповідають кордоні слова в разі, якщо перший або, відповідно, останній символ збігається з \ w.
Спеціальні послідовності \ A. \ Z і \ z відрізняються від загальновживаних метасимволов початку рядка # '^ #' І кінця рядка # '$ #' (Описаних в розділі якоря) тим, що вони завжди збігаються або на самому початку або в самому кінці рядка. На них ніяк не впливають опції PCRE_MULTILINE і PCRE_DOLLAR_ENDONLY. Різниця між \ Z і \ z в тому, що \ Z відповідає позиції перед останнім символом у випадку, якщо останній символ - новий рядок, крім самого кінця рядка. У той час, як \ z відповідає виключно кінця даних.
Затвердження \ G є істинним тільки в тому випадку, якщо поточна перевіряється позиція знаходиться на початку збігу, зазначеного параметром offset функції preg_match (). Вона відрізняється від \ A при ненульове значення параметра offset.
\ Q і \ E можуть бути використані для ігнорування метасимволов регулярних виразів в шаблоні. Наприклад: \ w + \ Q. $. \ E $ співпаде з один або більше символів, складових "слово", за якими слідують символи. $. і якір в кінці рядка.
Послідовність \ K може бути використана для скидання початку збігу починаючи з версії PHP 5.2.4. Наприклад, шаблон foo \ Kbar співпаде з "foobar", але повідомить про те, що збігся тільки з "bar". Використання \ K не заважає установці подмасок. Наприклад, якщо шаблон (foo) \ Kbar співпаде з рядком "foobar", першої подмаскі все одно буде "foo".