Регулярные выражения для начинающих: шпаргалка по синтаксису
Основы4 минРедакция Innovialabs
Коротко
Регулярное выражение — это шаблон для поиска текста, собранный из классов символов, квантификаторов, якорей и групп; освоив эти четыре блока, вы прочитаете большинство регулярок.
Что такое регулярное выражение
Регулярное выражение (regex) — короткий шаблон, который описывает, какой текст вы ищете. С его помощью проверяют формат ввода, вытаскивают данные из строк, делают поиск и замену в коде и логах.
Почти любая регулярка собирается из четырёх блоков:
- что искать — символы и классы символов;
- сколько раз — квантификаторы;
- где — якоря и границы;
- как сгруппировать — группы и альтернативы.
Синтаксис в JavaScript, Python, PHP, Java и Go в основном совпадает, но детали различаются — сверяйтесь с документацией своего языка.
Символы и классы символов
| Шаблон | Что означает | Пример совпадения |
|---|---|---|
abc | буквально «abc» | abc |
. | любой символ, кроме перевода строки | a, 7, % |
\d | цифра | 5 |
\w | буква, цифра или _ | a, Z, 3, _ |
\s | пробельный символ | пробел, таб |
\D, \W, \S | всё, кроме \d, \w, \s | |
[abc] | один из символов a, b, c | b |
[a-z] | символ из диапазона | k |
[^0-9] | любой символ, кроме цифр | x |
\. | точка как символ, а не «любой» | . |
Спецсимволы . * + ? ^ $ ( ) [ ] { } | и обратный слеш нужно экранировать через \, если вы ищете их буквально.
Учтите: в некоторых движках \w и \d по умолчанию совпадают только с латиницей и ASCII-цифрами. Для кириллицы надёжнее явный класс [а-яё] или Unicode-режим.
Квантификаторы
| Шаблон | Сколько раз |
|---|---|
* | 0 и больше |
+ | 1 и больше |
? | 0 или 1 |
{3} | ровно 3 |
{2,5} | от 2 до 5 |
{2,} | 2 и больше |
По умолчанию квантификаторы жадные — захватывают как можно больше. Добавьте ?, чтобы сделать их ленивыми: <.+> в строке <b>текст</b> захватит всё целиком, а <.+?> — только <b>.
Якоря и границы
| Шаблон | Значение |
|---|---|
^ | начало строки |
$ | конец строки |
\b | граница слова |
\B | не граница слова |
Для валидации почти всегда нужны ^ и $. Шаблон \d{4} найдёт 4 цифры внутри «abc12345», а ^\d{4}$ пропустит только строку из ровно четырёх цифр.
Группы и альтернатива
| Шаблон | Значение |
|---|---|
(abc) | группа с захватом |
(?:abc) | группа без захвата |
a|b | a или b |
\1 | обратная ссылка на первую группу |
(?<name>...) | именованная группа (в Python — (?P<name>...)) |
const re = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/;
const m = "Дата: 2026-03-15".match(re);
console.log(m.groups.year); // "2026"
Используйте (?:...), когда группа нужна только для квантификатора или альтернативы, — так нумерация захватов не сбивается.
Lookahead и lookbehind
Опережающие и ретроспективные проверки смотрят на соседний текст, не включая его в совпадение.
| Шаблон | Значение |
|---|---|
X(?=Y) | X, если за ним идёт Y |
X(?!Y) | X, если за ним не идёт Y |
(?<=Y)X | X, если перед ним стоит Y |
(?<!Y)X | X, если перед ним не стоит Y |
Классический пример — проверка пароля: ^(?=.*\d)(?=.*[a-z]).{8,}$ — минимум 8 символов, хотя бы одна цифра и одна строчная буква. Lookbehind поддерживается не во всех движках, а некоторые ограничивают его длину.
Флаги
i— без учёта регистра;g— найти все совпадения (JavaScript);m—^и$работают для каждой строки текста;s— точка совпадает и с переводом строки;u— режим Unicode (JavaScript).
Как тестировать регулярки
- Пишите шаблон в онлайн-тестере вроде regex101 или RegExr: они подсвечивают совпадения и объясняют каждую часть.
- Выберите в тестере тот же движок, что в вашем языке.
- Соберите список строк, которые должны и не должны совпадать, включая пустую строку и граничные случаи.
- Перенесите этот список в unit-тесты, чтобы регулярка не сломалась при правках.