Регулярные выражения (regex, regexp) — один из мощнейших инструментов в арсенале программиста. Они позволяют искать, заменять и извлекать данные из текста с помощью компактных шаблонов. Освоив regex, вы сможете за одну строку кода решать задачи, на которые иначе ушли бы десятки строк. Этот справочник покрывает весь синтаксис — от простейших символов до lookahead, lookbehind и именованных групп.
Примеры в руководстве протестированы в RegexLab и применимы к Python (модуль re), JavaScript (встроенный RegExp) и PHP (функции preg_*). Там, где синтаксис отличается между языками, это явно указано.
Базовый синтаксис регулярных выражений
Большинство символов в regex совпадают сами с собой — буква a находит букву «a» в тексте. Но ряд символов имеет специальное значение и называется метасимволами. Их нужно либо использовать по их семантике, либо экранировать обратным слешем для поиска буквального значения.
| Символ | Значение | Пример паттерна | Совпадает с |
|---|---|---|---|
| . | Любой символ, кроме новой строки | c.t | cat, cut, c9t |
| ^ | Начало строки | ^Hello | "Hello world" (с начала) |
| $ | Конец строки | world$ | "Hello world" (в конце) |
| * | 0 или более повторений | ab*c | ac, abc, abbc, abbbc |
| + | 1 или более повторений | ab+c | abc, abbc (но не ac) |
| ? | 0 или 1 повторение (необязательный) | colou?r | color, colour |
| [] | Символьный класс (один из) | [aeiou] | Любая гласная |
| {} | Точное количество повторений | \d{4} | Ровно 4 цифры |
| | | Альтернатива (ИЛИ) | cat|dog | cat или dog |
| () | Группа захвата | (ab)+ | ab, abab, ababab |
| \ | Экранирование метасимвола | \. | Буквальная точка «.» |
Классы символов
Классы символов — один из самых мощных инструментов regex. Они позволяют задать набор допустимых символов для одной позиции в паттерне.
Встроенные классы
| Класс | Эквивалент | Описание |
|---|---|---|
| \d | [0-9] | Цифра |
| \D | [^0-9] | Не цифра |
| \w | [a-zA-Z0-9_] | Буква, цифра или подчёркивание |
| \W | [^a-zA-Z0-9_] | Не слово (пробел, знак препинания…) |
| \s | [ \t\n\r\f\v] | Пробельный символ |
| \S | [^ \t\n\r\f\v] | Не пробельный символ |
| \b | — | Граница слова (между \w и \W) |
| \B | — | Не граница слова |
Пользовательские классы и диапазоны
Квантификаторы и жадность
Квантификаторы определяют, сколько раз элемент должен повториться. По умолчанию они жадные (greedy) — захватывают максимально возможное количество символов. Добавление ? делает квантификатор ленивым (lazy) — он захватывает минимально необходимое.
| Квантификатор | Значение | Ленивый |
|---|---|---|
| * | 0 или более | *? |
| + | 1 или более | +? |
| ? | 0 или 1 | ?? |
| {n} | ровно n раз | {n}? (то же) |
| {n,} | n или более | {n,}? |
| {n,m} | от n до m | {n,m}? |
Группы захвата и ссылки
Группы захвата позволяют выделить часть совпадения для последующего извлечения или использования в замене. Они обозначаются круглыми скобками и нумеруются слева направо по открывающей скобке.
Lookahead и Lookbehind
Конструкции предпросмотра позволяют задать условие для совпадения без включения этого условия в результат. Они называются «нулевой ширины» — не потребляют символы строки.
| Конструкция | Тип | Описание |
|---|---|---|
| (?=...) | Позитивный lookahead | Следующие символы ДОЛЖНЫ совпасть |
| (?!...) | Негативный lookahead | Следующие символы НЕ должны совпасть |
| (?<=...) | Позитивный lookbehind | Предыдущие символы ДОЛЖНЫ совпасть |
| (?<!...) | Негативный lookbehind | Предыдущие символы НЕ должны совпасть |
Флаги регулярных выражений
Флаги изменяют режим работы всего паттерна. В JavaScript флаги записываются после второго слеша: /pattern/gi. В Python передаются в re.compile(pattern, flags).
| Флаг | JS | Python | Описание |
|---|---|---|---|
| i (ignoreCase) | /re/i | re.IGNORECASE | Регистронезависимый поиск. /hello/i найдёт Hello, HELLO, hElLo |
| g (global) | /re/g | re.findall() | Найти все совпадения, а не только первое |
| m (multiline) | /re/m | re.MULTILINE | ^ и $ совпадают с началом/концом каждой строки, а не всего текста |
| s (dotAll) | /re/s | re.DOTALL | Точка . совпадает с любым символом, включая перевод строки |
| u (unicode) | /re/u | по умолчанию | Полная поддержка Unicode. Необходим для \p{} категорий |
| x (verbose) | — | re.VERBOSE | Разрешает пробелы и комментарии внутри паттерна для читаемости |
Практические примеры
Следующие паттерны охватывают наиболее распространённые задачи. Каждый из них можно скопировать и протестировать в RegexLab прямо сейчас.
Валидация email
Номер телефона
URL
IP-адрес (IPv4)
Дата в формате DD.MM.YYYY
// Протестируйте прямо сейчас
Все паттерны из этого справочника можно протестировать в RegexLab — онлайн-тестере с live-подсветкой совпадений и объяснением каждого токена. Работает офлайн, данные не покидают браузер.
Открыть RegexLab