В доступной форме приводятся основные элементы языка описания шаблонов регулярных выражений.
Ниже в удобной табличной форме приведены элементы, используемые для составления шаблонов регулярных выражений. Чтобы не загромождать справочник излишней информацией, но и не отходить от терминов, описание использованных специальных элементов языка дано в вводной статье Введение в регулярные выражения. Для удобства поиска ниже приведены ссылки на основные разделы справочника.
| ↓ Метасимволы | ↓ Якоря |
| ↓ Классы | ↓ Модификаторы |
| ↓ Квантификаторы | ↓ Функции PHP |
Метасимволы
Список специальных символов, используемых в регулярных выражениях: \ | ^ $ [ ] ( ) { } . ? * +
Ниже в таблице приведено описание некоторых специальных символов, применяемых в шаблонах.
| Символ | Описание | Примечание |
|---|---|---|
| \d | Любая цифра | Аналог: [0-9] |
| \D | Любой не цифровой символ | Аналог: [^0-9] |
| \s | Управляющий символ | Аналог:[\n\r\t\f\v] |
| \S | Непустой символ (все, кроме символов, определяемых метасимволом \s) | Аналог:[^\t\n\r\f\v] |
| \w | Текстовые, цифровые символы и символ подчеркивания | Аналог:[a-zA-Z0-9_] |
| \W | Все, кроме символов, определяемых метасимволом \w | Аналог:[^a-zA-Z0-9_] |
Метасимволы, в зависимости от своей позиции в шаблоне, имеют разное назначение.
| Символ | Описание | Примечание |
|---|---|---|
| Метасимволы, используемые вне класса | ||
| \ | Допускает несколько вариантов применения: экранирует метасимволы, позволяя использовать их в качестве обычных; используется для задания невидимых символов; используется для задания некоторых специальных диапазонов символов; указывает место поиска в строке |
|
| ^ | Привязывает поиск к началу текста или строки | |
| $ | Привязывает поиск к концу текста или строки | |
| . | Обозначает любой символ, в том числе и непечатный, кроме перевода строки | |
| ( | Начало подшаблона | |
| ) | Окончание подшаблона | |
| { | начало квантификатора | |
| } | Окончание квантификатора | |
| Метасимволы, используемые внутри класса | ||
| \ | Экранирует метасимвол, превращая его в обычный символ | \ab\ncd\ – строка abncd |
| ^ | Исключает последующие символы класса из поиска | [^a-z] – все строчные символы исключены из поиска |
| — | Используется для указания интервала символов | \a-z\ – все строчные символы |
| . | Символ точки | |
Классы
| Символ | Описание | Примечание |
|---|---|---|
| [ | Определяет начало описания символьного класса | |
| ] | Определяет конец описания символьного класса | |
| [ ] | Ищется любой из символов, указанный в скобках | Внутри скобок указывайте требуемые символы без разделителей |
| [^] | Из поиска исключается любой из символов в скобках после знака ^ | Например,[^abc] – исключить из поиска символы «a», «b», «c» |
| . | Обозначает обычный символ точки | |
| \w | Любой текстовый символ | Аналог:[a-zA-Z0-9_] |
| \W | Любой символ, не являющийся текстовым | Аналог:[^a-zA-Z0-9_] |
| \s | Любой пробельный символ из набора Unicode (whitespace) | невидимые символы \t, \n, \r, \f |
| \S | Любой непробельный символ из набора Unicode | |
| \d | Любые ASCII-цифры | Тоже, что и [0-9] |
| \D | Любой символ, отличный от ASCII-цифр | Тоже, что и [^0-9] |
| { | начало квантификатора | |
| } | окончание квантификатора |
Якоря
| Символ | Описание | Примечание |
|---|---|---|
| ^ | Привязка шаблона поиска к началу строки или текста при использовании вне класса | Значение метасимвола зависит от места в шаблоне |
| $ | Привязка шаблона поиска к концу строки или текста | Значение метасимвола зависит от параметров поиска |
| \b | Совпадения должно быть на границе слова | Внутри класса означает символ backspace |
| \B | Совпадения не должно быть на границе слова | |
| \A | Определяет начало данных, не зависит от параметра многострочного режима | Нельзя использовать в классах |
| \n | Означает символ перехода на новую строку | |
| \r | Означает символ возврата каретки | |
| \Z | Конец текста | Нельзя использовать в классах |
Квантификаторы
Используются для указания количества повторений предшествующих символов, позволяет указать конкретное значение или диапазон значений. Указывается в фигурных скобках после нужных символов. Необходимо помнить, что по умолчанию квантификаторы «жадные»(greedy), что не всегда приемлемо. «Жадные» квантификаторы пытаются захватить часть входного текста с возможно большим повторением, в то время как «не жадные» – находят текст с минимальным повторением.
| Символ | Описание | Примечание |
|---|---|---|
| {n,m} | Искать предшествующий шаблон, который повторяется не менее n и не более m раз | «Жадный» |
| {n,} | Искать предшествующий шаблон, повторенный n или более раз | «Жадный» |
| {n} | Искать предшествующий шаблона, повторенный точно n раз | «Жадный» |
| ? | Соответствует нулю или одному экземпляру предшествующего шаблона | Эквивалентно {0,1}, «жадный» |
| + | Искать один или более экземпляров предшествующего шаблона | Эквивалентно {1,}, «жадный» |
| * | Соответствует нулю или более экземплярам предшествующего шаблона | Эквивалентно {0,}, «жадный» |
| *? | Соответствует нулю или более экземплярам предшествующего шаблона | Эквивалентно {0,}, не «жадный» |
| +? | Искать один или более экземпляров предшествующего шаблона | Эквивалентно {1,}, не «жадный» |
| ?? | Соответствует нулю или одному экземпляру предшествующего шаблона | Эквивалентно {0,1}, не «жадный» |
| {n,m}? | Искать предшествующий шаблон, который повторяется не менее n и не более m раз | Не «жадный» |
Модификаторы
Ниже приведен список метасимволов, управляющих режимом поиска. Указываются после символьного шаблона, например \строка_поиска\m
| Символ | Описание | Примечание |
|---|---|---|
| i | Регистронезависимый режим поиска | |
| m | Многострочный режим поиска | |
| s | Cимвол «.» (точка) в шаблоне при этом модификаторе соответствует всем символам, включая перенос строки, по умолчанию — исключая перенос строки | |
| A | Привязка к началу текста | Модификатор m не влияет на этот метасимвол |
| Z | Привязка к концу текста | Модификатор m не влияет на этот метасимвол |
Функции PHP, использующие регулярные выражения по стандарту PCRE
В PHP для поиска по шаблону Perl совместимых регулярных выражений можно использовать такие функции.
int preg_match(string шаблон, string строка [, array совпадения]) – ищет в заданной строке заданную строку шаблона, при совпадении возвращает true, иначе false.
int preg_match_all(string шаблон, string строка, array совпадения [, int порядок]) – ищет все совпадения шаблона в заданной строке. Последний необязательный параметр определяет порядок сохранения совпадений в массиве и может принимать значения:
preg_pattern_order(по умолчанию) – выходной элемент с индексом 0 содержит массив совпадений для всего регулярного выражения, элемент с индексом 1 содержит массив всех совпадений для первого подвыражения в круглых скобках и т. д.;
preg_set_order – выходной элемент с индексом 0 содержит массив с текстом, совпавшим со всеми подвыражениями в круглых скобках для первого найденного совпадения, элемент с индексом 1 содержит аналогичный массив для второго найденного совпадения и т. д.
mixed preg_replace(mixed шаблон, mixed замена, mixed строка [, int порог]) — ищет в заданной строке совпадение для шаблона и заменяет его новым фрагментом, необязательный последний параметр задает максимальное количество замен в строке.
array preg_split(string шаблон, string строка [, int порог [, int флаги]]) – разбивает заданную строку на элементы, границы которых определяет входной шаблон.
array preg_grep(string шаблон, array массив) – ищет и возвращает все элементы заданного массива, в которых совпадает заданный шаблон.
preg_quote(string $str [, string $delimiter = NULL ]) – функция во входной строке $str ставит обратный слэш перед каждым служебным символом, где служебными являются символы из списка.
\ + * ? [ ^ ] $ ( ) { } = ! < > | : —
Необязательный параметр $delimiter позволяет задать символ, который также будет экранироваться.
В следующей статье на тему регулярных выражений закрепим знания на актуальных примерах.