Регулярні вирази PHP

Матеріал з Вікі ЦДУ
Версія від 20:43, 19 травня 2013; Ярослав (обговореннявнесок)

(різн.) ← Попередня версія • Поточна версія (різн.) • Новіша версія → (різн.)
Перейти до: навігація, пошук

Регулярні вирази PHP

Регулярні вирази - потужний гнучкий інструмент для синтаксичного аналізу тексту у відповідності з певним шаблоном.

Шаблон - рядок символів, спецсимволів і модифікаторів, що описують правила, яким повинен відповідати текст, що аналізується.

Синтаксис регулярних виразів

Будь-який шаблон повинен бути обмежений символами-обмежувачами. В якості таких символів можна використовувати будь-який не буквено-цифровий символ крім '\'. Не рекомендується використовувати в якості обмежувачів інші спеціальні символи, з причини незручності їх використання усередині шаблону. Переважно всього використовувати символ /, тому що він не виконує ніяких спеціальних функцій. Символ, використовуваний як обмежувач шаблону усередині шаблону повинен екрануватися. Приклад: '/ pattern / i' - відповідає рядку, в якому є слово pattern. i - це модифікатор.

1 - Спецсимволи

\ - Символ екранування. Приклад: '/ qwe \ / rty /' - відповідає рядку, в якому є qwe / try. Символ / ми заекранувати, після чого він перестав виконувати в даному місці своє спеціальне значення (він був обмежувачем шаблону). ^ - Символ початку даних. $ - Символ кінця даних. Приклад:

'/ ^ pattern $ /' - Відповідає рядку, точно збігається з словом pattern. Тобто з літери p рядок починається і після n закінчується.

. (крапка) - Будь-який символ, крім переходу на новий рядок. Але є модифікатор, при використанні якого перехід на новий рядок теж відноситься до "будь-яких" символів. Приклад:

'/ pat.ern /' - Відповідає або рядку, що містить pattern, або patdern, або pat3ern ...

[ ] - Всередині цих дужок перераховуються символи, будь-який з яких може стояти на даному місці. Це називається символьним класом. Спецсимволи, написані у [ ] ведуть себе трохи інакше. Приклад:

'/ pat [aoe] rn /' - під відповідність потраплять тільки рядки, що містять patarn, patorn або patern.

| - Або. Приклад нижче. ( ) - Підмаска. ? - Одне або нуль входжень попереднього символу або підмаски. * - Будь-яку кількість входжень попереднього символу або підмаски. У тому числі й нуль. + - Одне або більше входжень. Приклад:

'/ as + (es | du)?. * R /' - Буква а, потім одна або більше букв s, після цього поєднання es або du може бути один раз, а може м жодного разу, потім будь-яку кількість будь-яких символів і буква r.

В нашому прикладі ось цієї частини '. * R' буде відповідати, наприклад, підрядок asdrfsrsfdr. Як видно, до останньої букви r в неї потрапило ще дві. Це можна вимкнути. Тобто шаблон стане відповідати тільки підрядку asdr. До першого r. Для цього треба в тому місці де це потрібно поставити модифікатор (? U). Ось ще одне застосування символам ? і (). {A, b} - кількість входжень попереднього символу або підмаски від а до b. Якщо b не вказаний, вважається, що верхньої межі немає. Наприклад, * - те ж саме, що {0,}. ? - Те ж, що й {0,1}. {5,7} - 5,6 або 7 повторень.

Спецсимволи всередині символьного класу

^ - Заперечення.

Приклад: [^ da] - відповідає будь-якому символу крім d і a.
Приклад: [^ ^] - відповідає будь-якому символу крім ^.
Приклад: [d ^ a] - відповідає будь-якому символу з перерахованих трьох. [\ ^ da] - те ж саме.

В останньому прикладі, як видно символ стоїть не на початку перерахування і свою метафункцію втрачає. І екранувати його, до речі, теж тут не треба. - - Всередині символьного класу означає символьний інтервал. Приклад: [0-9a-e] - відповідає будь-якому символу від 0 до 9 і від a до e. Якщо в символьному класі треба перерахувати сам символ дефіса, то слід або заекранувати його, або розмістити перед ]. В символьному класі треба обережно використовувати символ \. Якщо його поставити перед ], вона може заекрануватися. Також заекрануватись може будь-який символ, який може бути заекранованим. Інакше символ \ є звичайним символом. Символ $ теж є звичайним символом всередині символьного класу. І дужки теж.