Регулярные выражения есть почти везде: в JavaScript, Python, PHP, SQL, в редакторах кода, в Google Таблицах и в командной строке. Одна строчка regex может заменить десятки строк кода для проверки форм, поиска в логах и массовой замены. Ниже — практическая шпаргалка. Синтаксис дан в стиле JavaScript/PCRE; в других языках возможны небольшие отличия.
Основные символы
| Символ | Значение | Пример |
|---|---|---|
. |
любой символ, кроме перевода строки | к.т → кот, кит |
\d |
цифра | \d\d → 42 |
\w |
буква, цифра или _ (по умолчанию только латиница) |
\w+ |
\s |
пробельный символ | \s+ |
\D, \W, \S |
противоположные классы | \D — не цифра |
[abc] |
один из символов | [аеёиоуыэюя] |
[^abc] |
любой, кроме перечисленных | [^0-9] |
^ |
начало строки | ^Привет |
$ |
конец строки | \.pdf$ |
\b |
граница слова (для латиницы) | \bcat\b |
| |
или | jpg|png |
\ |
экранирование | \. — точка |
Квантификаторы
| Квантификатор | Значение |
|---|---|
* |
0 или больше |
+ |
1 или больше |
? |
0 или 1 |
{n} |
ровно n |
{n,} |
n и больше |
{n,m} |
от n до m |
Пример: \d{3,5} — от трёх до пяти цифр подряд.
Группы и обратные ссылки
( … )— группа с захватом: можно сослаться на найденное как$1,\1.(?: … )— группа без захвата, только для объединения.(?<year>\d{4})— именованная группа.
Пример замены формата даты 2026-10-07 → 07.10.2026:
Найти: (\d{4})-(\d{2})-(\d{2})
Заменить: $3.$2.$1
Флаги
| Флаг | Значение |
|---|---|
g |
найти все совпадения, а не только первое |
i |
без учёта регистра |
m |
^ и $ работают для каждой строки |
s |
. совпадает и с переводом строки |
u |
режим Unicode (нужен для \p{…} и корректной работы с эмодзи) |
Кириллица: важные нюансы
- Буква ё не входит в диапазон
а-я. Правильный класс:[а-яё], а с заглавными —[а-яА-ЯёЁ]. \wи\bв JavaScript без специальных настроек работают только с латиницей:\w+не найдёт слово «привет». Используйте[а-яА-ЯёЁ]+или\p{L}+с флагомu.- В Python 3
\wпо умолчанию понимает Unicode, поэтому там кириллица находится.
Практические примеры
Российский мобильный телефон
^(\+7|8)[\s\-]?\(?9\d{2}\)?[\s\-]?\d{3}[\s\-]?\d{2}[\s\-]?\d{2}$
Совпадёт с +7 912 345-67-89, 8(912)3456789, +79123456789. На практике лучше сначала удалить из строки всё, кроме цифр, а потом проверить: ^(7|8)9\d{9}$.
Email (упрощённая проверка)
^[^\s@]+@[^\s@]+\.[^\s@]{2,}$
Проверяет наличие одной @, отсутствие пробелов и точку в домене. Полная проверка по стандарту RFC 5322 займёт сотни символов и всё равно не гарантирует, что ящик существует. Для доменов вроде почта.рф учитывайте, что в адресе может быть кириллица.
Дата в формате ДД.ММ.ГГГГ
^(0[1-9]|[12]\d|3[01])\.(0[1-9]|1[0-2])\.(19|20)\d{2}$
Проверяет формат, но пропустит 31.02.2026. Проверку существования даты лучше делать кодом.
ИНН
^\d{10}$|^\d{12}$
10 цифр — у организаций, 12 — у физических лиц и ИП. Контрольные цифры ИНН регулярным выражением не проверить, для этого нужен алгоритм.
Почтовый индекс России
^\d{6}$
Номер автомобиля (упрощённо)
^[АВЕКМНОРСТУХ]\d{3}[АВЕКМНОРСТУХ]{2}\d{2,3}$
В номерах используются только 12 кириллических букв, совпадающих по начертанию с латинскими.
Жадные и ленивые квантификаторы
По умолчанию * и + жадные — захватывают максимум.
Строка: <b>один</b> и <b>два</b>
<b>.*</b>→<b>один</b> и <b>два</b>(вся строка);<b>.*?</b>→<b>один</b>, затем<b>два</b>(ленивый вариант).
Добавление ? после квантификатора делает его ленивым: *?, +?, {n,m}?.
Опережающие и ретроспективные проверки
Иногда нужно найти текст, только если рядом есть (или нет) что-то ещё, не включая это в совпадение:
| Конструкция | Значение | Пример |
|---|---|---|
X(?=Y) |
X, если за ним следует Y | \d+(?= ₽) — число перед « ₽» |
X(?!Y) |
X, если за ним не следует Y | \d+(?!%) |
(?<=Y)X |
X, если перед ним Y | (?<=№)\d+ — номер после «№» |
(?<!Y)X |
X, если перед ним нет Y |
Пример: проверка пароля «не короче 8 символов, есть цифра и заглавная буква»:
^(?=.*\d)(?=.*[A-ZА-ЯЁ]).{8,}$
Regex в Google Таблицах и Excel
В Google Таблицах есть функции REGEXMATCH, REGEXEXTRACT и REGEXREPLACE (в русской версии — REGEXMATCH и т. д. без перевода). Например, =REGEXEXTRACT(A1; "\d{6}") вытащит почтовый индекс из адреса. В Excel аналогичные функции (REGEXTEST, REGEXEXTRACT, REGEXREPLACE) появились в Microsoft 365.
Типичные ошибки
- Забытые якоря. Без
^…$проверка формата пропускает лишние символы вокруг. - Неэкранированная точка.
site.ruсовпадёт и сsiteXru. Правильно:site\.ru. - Катастрофический возврат. Шаблоны вроде
(a+)+$на длинных строках могут «зависнуть» — это даже используется в атаках ReDoS. Избегайте вложенных квантификаторов. - Парсинг HTML регулярками. Для небольших задач допустимо, для полноценного разбора используйте парсер.
- Разные диалекты.
\dв некоторых движках совпадает и с цифрами других алфавитов; lookbehind поддерживается не везде.
Как тестировать
Проверяйте шаблон на наборе строк — как правильных, так и неправильных — в тестере регулярных выражений. Он подсвечивает совпадения и группы, а флаги можно включать и выключать на лету.
Если строку нужно закодировать для URL или передать в JSON, регулярное выражение придётся экранировать дважды; проверить результат можно в URL-кодировщике и JSON-форматтере. Об этом — в гайдах Base64 и URL-кодирование и Что такое JSON.
Чек-лист
- Шаблон привязан к началу и концу строки, если это проверка формата.
- Спецсимволы экранированы.
- Кириллица и буква ё учтены.
- Протестированы и правильные, и неправильные примеры.
- Нет вложенных квантификаторов, опасных для производительности.