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

Регулярні вирази дозволяють знайти в рядку послідовності, відповідні шаблоном. Наприклад шаблон "Вася (. *) Пупкін" дозволить знайти послідовність коли між словами Вася і Пупкін буде будь-яку кількість будь-яких символів. Якщо треба знайти шість цифр, то пишемо "[0-9]" (якщо, наприклад, від шести до восьми цифр, тоді "[0-9]"). Тут розділені такі речі як покажчик набору символів і покажчик необхідної кількості:

Замість набору символів може бути використано позначення будь-якого символу - точка, може бути вказаний конкретний набір символів (підтримуються послідовності - згадувані "0-9"). Може бути вказано "крім даного набору символів".

Покажчик кількості символів в офіційній документації по php називається "квантіфікатор". Термін зручний і не несе в собі пересудів. Отже, квантіфікатор може мати як конкретне значення - або одне фіксоване ( ""), або як числовий проміжок ( ""), так і абстрактне "будь-яке число, в т.ч. 0" ( "*"), "будь-яке натуральне число "- від 1 до нескінченності (" + ":" document [0-9] +. txt ")," або 0, або 1 "("? "). За замовчуванням квантіфікатор для даного набору символів дорівнює одиниці ( "document [0-9] .txt").

Для більш гнучкого пошуку поєднань ці зв'язки "набір символів - квантіфікатор" можна об'єднувати в метаструктур.

Як всякий гнучкий інструмент, регулярні вирази гнучкі, але не абсолютно: зона їх застосування обмежена. Наприклад, якщо вам треба замінити в тексті одну фіксовану рядок на іншу, фіксовану знову ж, користуйтеся str_replace. Розробники php слізно благають не користуватися заради цього складними функціями ereg_replace або preg_replace, адже при їх виклик відбувається процес інтерпретації рядка, а це серйозно споживає ресурси системи. На жаль, це улюблені граблі початківців php-програмістів.

Користуйтеся функціями регулярних виразів тільки якщо ви не знаєте точно, яка "там" рядок. З прикладів: пошуковий код. в якому з рядка пошуку вирізаються службові символи і короткі слова а так само вирізаються зайві прогалини (вірніше, всі прогалини стискаються: "+" замінюється на один пробіл). За допомогою цих функцій я перевіряю email користувача, що залишає свій відгук. Багато корисного можна зробити, але важливо мати на увазі: регулярні вирази не всесильні. Наприклад, складну заміну у великому тексті ними краще не робити. Адже, наприклад, комбінація "(. *)" В програмному плані означає перебір всіх символів тексту. А якщо шаблон не прив'язаний до початку або кінця рядка, то і сам шаблон "рухається" програмою через весь текст, і виходить подвійний перебір, вірніше перебір в квадраті. Неважко здогадатися, що ще одна комбінація "(. *)" Означає перебір в кубі, і так далі. Зведіть в третю ступінь, скажімо, 5 кілобайт тексту. Виходить 125 000 000 000 (прописом: Сто двадцять п'ять мільярдів операцій). Звичайно ж, якщо підходити строго, там стількох операцій не буде, а буде рази в чотири-вісім менше, але важливий сам порядок цифр.

набір символів

На цьому місці може бути один з перерахованих варіантів, наприклад: (Вася | Петя | Маша). Якщо Ви не хочете, щоб це потрапило у вибірку використовуйте (.)

Не користуйтеся класом символів для позначення всього лише одного (замість "[] +" цілком зійде "+"). Не пишіть в класі символів точку # 151; це ж будь-який символ, тоді інші символи в класі будуть просто зайвими (а в негативному класі вийде заперечення всіх символів).

квантіфікатор

Квантіфікатор можна вказати як конкретне значення, так і межі. Якщо число заданих підпадає під межі квантіфікатора, фрагмент вираження вважається яке співпало з розглядуваної рядком. синтаксис:

Якщо потрібно вказати тільки необхідний мінімум, а максимуму немає, просто ставимо кому і не пишемо друге число: "" ( "мінімум 5"). Для найбільш часто вживаних квантіфікаторов є спеціальні позначення:

"Зірочка" або знак множення

Схожі статті