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

Регулярные выражения в PHP

В PHP4 поддерживаются два стандарта для регулярных выражений: стандарт POSIX (Portable Operating System Interface for UNIX – переносимый интерфейс операционной системы для UNIX) и стандарт PCRE (Perl-Compatible Regular Expression – Регулярные выражения языка Perl).

Стандарт PCRE предоставляет более широкие возможности, и поэтому ограничимся рассмотрением только этого стандарта.

Синтаксис регулярных выражений в PHP такой же, как и в языке JavaScript. В качестве ограничителя регулярного выражения наиболее часто используются символ "/", но можно использовать любой другой символ, кроме букв и цифр. Если ограничитель используется внутри регулярного выражения, перед ним должен быть указан символ "\", например:

/a\/b/

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

· "\" – если следующий символ в обычном режиме имеет какое-либо специальное значение, то он теряет это свое специальное значение и рассматривается как обычный символ. Если следующий символ в обычном режиме не имеет никакого специального значения, то он может получить такое значение, будучи соединенным с символом "\";

· "|" – начало альтернативного поиска;

· "." – на данном месте в строке может находиться любой символ (за исключением символа перевода строки);

· "+" – предыдущий символ может повторяться в строке поиска один или более раз;

· "*" – предыдущий символ может повторяться в строке поиска ноль или более раз;

· "?" – предыдущий символ может повторяться в строке поиска один раз или отсутствовать;

· "(" и ")" – начало и окончание группы элементов;

· "{" и "}" – начало и окончание квантификатора;

· "[" и "]" – начало и окончание описания класса символов;

· "^" – поиск в начале строки (или в начале каждой подстроки в строке, состоящей из нескольких подстрок, разделенных символами "\n");

· "$" – поиск в конце строки (или в конце каждой подстроки в строке, состоящей из нескольких подстрок, разделенных символами "\n").

Так же, как в JavaScript, для задания в шаблонах символов перевода строки, возврата каретки, табулятора и новой страницы используются специальные символы "\n", "\r", "\t" и "\f". Символы ASCII задаются в виде "\x код ", где код – шестнадцатеричный код символа.

В PHP определены следующие метасимволы для задания групп символов:

· "\d" – цифра (0-9);

· "\D" – не цифра (любой символ кроме символов 0-9);

· "\s" – пустой символ (обычно пробел и символ табуляции);

· "\S" – непустой символ (все, кроме символов, определяемых метасимволом "\s");

· "\w" – «словесный» символ (символ, который используется в словах, обычно все буквы, все цифры и знак подчеркивания "_");

· "\W" – все, кроме символов, определяемых метасимволом "\w";

· "\b" – граница слова;

· "\B" – не граница слова;

· "\A" – начало строки;

· "\Z" – конец строки или символ "\n" в конце строки;

· "\z" – конец строки.

Конструкция

символ { n,m }

задает минимально допустимое количество повторений(n) и максимально допустимое количество повторений (m) данного символа (или группы символов). Если m не задано, то максимальное количество повторений символа не ограничено, если также отсутствует запятая, то количество повторений символа должно быть равно n.

По умолчанию поиск соответствий шаблону является «прожорливым» (greedy), т.е. возвращается максимальный фрагмент для заданного шаблона. Так шаблон /.+ое/ для строки

красное и зеленое яблоко

вернет соответствие

красное и зеленое.

Чтобы указать на поиск минимального соответствия, необходимо после количественного метасимвола задать метасимвол "?". Так, если задать шаблон /.+?ое/ для предыдущей строки, то результатом поиска будет строка красное.

Для определения собственных подмножеств символов используются выражения, заключенные в квадратные скобки (символы "[" и "]"). Квадратные скобки внутри регулярного выражения считаются одним символом, который может принимать значения, перечисленные внутри этих скобок, например, выражение [02468] означает все четные цифры. Внутри квадратных скобок могут использоваться только следующие метасимволы:

· "-" – используется для задания набора символов из одного промежутка (например, все цифры могут быть заданы как [0-9]);

· "^" – если этот символ стоит первым в квадратных скобках, он рассматривается как символ отрицания (например, [^0-9] задает все нецифровые символы);

· "\" – делает следующие за ним метасимволы "-", "^" и "]" обычными символами (например, все виды скобок могут быть заданы как [(){}<>[\]]).

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

· i – игнорирование регистра букв (по умолчанию регистр букв учитывается). Так шаблону /это/i удовлетворяют строки это, ЭТО, Это и т.д.;

· m – если в строке есть символами "\n", каждый из них считается окончанием отдельной подстроки, и метасимволы "^" и "$" в шаблоне учитываются для каждой подстроки (по умолчанию метасимволы "^" и "$" учитываются только для начала и конца всей строки);

· s – метасимвол "." соответствует всем символам, включая символ "\n" (по умолчанию, метасимвол "." не включает символа перевода строки);

· U – все квантификаторы становятся не «жадными»;

· x – все пробельные символы в шаблоне (за исключением экранированных) игнорируются. Кроме того, игнорируются все символы, начиная от неэкранированного символа "#" до символа окончания строки "\n" (это позволяет вставить в шаблон комментарии);

· e – используется рассматриваемой ниже функцией preg_replace();

· A – шаблон ищется только в начале строки (или подстроки, если задан модификатор m);

· D – шаблон ищется только в конце строки (или подстроки, если задан модификатор m);

· S – выполняется дополнительный анализ шаблона (полезно использовать, когда шаблон не имеет фиксированных начальных символов и не использует метасимволов "^" и "$");

· X – любой буквенный символ, который следует за символом "\" и не используется для обозначения групп символов, вызывает сообщение об ошибке (по умолчанию такая комбинация символов рассматривается как литерал);

· u – шаблон считается заданным в кодировке UTF-8.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: