Синтаксис регулярных выражений в PHP

Синтаксис регулярных выражений

Любое регулярное выражение можно представить в виде разделителя ( «/» , «|», «{«, «!» и т.п. ) и модификатора, влияющего на способ обработки РВ.

Разберем наше регулярное выражение, где мы искали все семизначные номера телефонов – /\d{3} – \d{2} – \d{2}/m. Здесь символ «/»является разделителем, \d{3} – \d{2} – \d{2} – непосредственно регулярное выражение (шаблон), а m – модификатор.

Регулярные выражения позволяют программировать альтернативы и повторения. Происходит это за счет специальных метасимволов.

Одним из основных метасимволов является обратный слеш «\». Он меняет тип символа, следующего за ним, на противоположный, т.е. если это был обычный символ, то он МОЖЕТ превратиться в метасимвол, если это был метасимвол, то он теряет свое специальное значение и становится обычным символом (это нужно для того, чтобы вставлять в текст специальные символы как обычные). Например, символ d в обычном режиме не имеет никаких специальных значений, но \d есть метасимвол, означающий «любая цифра». Символ «.» в обычном режиме означает «любой единичный символ», а «\.» означает просто точку.

Другое назначение обратного слеша – кодирование непечатных символов, таких как :

\n – символ перевода строки;

\e – символ escape;

\t – символ табуляции;

\xhh – символ в шестнадцатеричном коде, например \x41 есть буква A и т.д.

Еще одно назначение обратного слеша – обозначение генерируемых символьных типов, таких как:

\d – любая десятичная цифра (0 – 9);

\D – любой символ, не являющийся десятичной цифрой;

\s – любой пустой символ (пробел или табуляция);

\S – любой символ, не являющийся пустым;

\w – буквы, цифры и символ подчеркивания

\W – не словарный символ (все символы, кроме определяемых \w).

Попробуем самостоятельно разобрать следующее регулярное выражение:

/\d\d – \d\d\d\d – \w\w\w\w\w\w/

Данное РВ будет искать строку, которая удовлетворяет следующим параметрам:

в начале идут 2 цифры

затем символ « – »

затем 4 цифры

символ « – »

и под конец – 6 алфавитных символов

Строка 24 – 4564 – moscow полностью удовлетворяет условиям нашего регулярного выражения.

Квадратные скобки [ ].

Квадратные скобки «[ ]» применяются для описания подмножеств внутри регулярного выражения, которые будут рассмотренны, как один символ, который может принимать значения, перечисленные внутри этих скобок.

Но если первым символом внутри квадратных скобок будет «^» то наоборот, могут приниматься только значения, не перечисленные внутри скобок.

Рассмотрим несколько примеров:

Строка [абвгд] позволяет выбрать один из символов «а, б, в, г, д», а строка [^абвгд] задает любой символ кроме «а, б, в, г, д».

Следующее регулярное выражение, описанное при помощи квадратных скобок задает любую цифру или букву в обоих регистрах – [0 – 9А – Яа – я]

Метасимволы

Все метасимволы можно разделить на две большие категории: метасимволы, распозноваемые внутри квадратных скобок и метесимволы, распознаваемые вне квадратных скобок.

Итак, метасимволы, распознаваемые внутри квадратных скобок:

\ – метасимвол, имеющий множество возможных значений

^ – если этот метасимвол располжен сразу после открывающей квадратной скобки, то он рассматривается интерпретатором, как символ отрицания класса.Например «^\d» означает – «все кроме цифр»

– позволяет задать диапазон (0 – 9, А – Я).

] – позволяет определить символьный класс

Метасимволы, распознаваемые вне квадратных скобок:

\ – метасимвол, имеющий множество возможных значений

^ – определяет, что искомая последовательность символов должна быть расположенна в самом начале строки

$ – определяет, что искомая последовательность символов должна быть расположенна в конце строки

. – определяет любой символ

[ – начинает определение символьного класса

] – заканчивает определение символьного класса

| – разделитель альтернатив

( – начало подшаблона

) – конец подшаблона

? – расширяет значения квантификаторов

* – квантификатор 0 или более повторений

+ – квантификатор 1 или более повторений

{ – открывает квантификатор

} – закрывает квантификатор

Метасимвол прямая черта « | » позволяет задавать альтернативные варианты. Примером альтернативы может служить следующая строка : «(стол|стул)».

Теперь мы знаем большинство символов, используемых в регулярных выражениях и можем самостоятельно разобрать достаточно сложное выражение. Попробуем выделить в тексте строку, содержащую фамилию с инициалами. Выглядеть данное регулярное выражение будет следующим образом:

!\s[А – Яа – я]+\s([А – Я]\.\s*)([А – Я]\.\s*)!m

Восклицательные знаки по обоим сторонам шаблона задают его границы. Начнем разбирать шаблон с самого начала:

\s – говорит о том, что перед фамилией должен идти пустой символ (пробел или табуляция).

[А – Яа – я] – затем идет любая последовательность алфавитных символов в любом регистре

+ – которая повторяется один или более раз

\s – говорит о том, что после фамилии должен идти пробел

( – открываем подшаблон внутри нашего шаблона

[А – Я] – затем идет любой символ от А до Я в верхнем регистре

\. – после буквы идет точка ( для задания точки мы экранируем ее символом \).

\s* – далее может быть один или несколько пробелов или не быть их вообще (благодаря символу *)

([А – Я]\.\s*)([А – Я]\.\s*) – вся конструкция повторяется два раза для задания инициалов

m – включает многострочный режим

   Отправить статью как PDF