webtrajans
ru

Регулярные выражения: шпаргалка и практические примеры

Регулярные выражения (regex) — компактный язык для поиска и проверки текста. Ниже — основной синтаксис, готовые шаблоны для российских телефонов, дат и email и ловушки, на которых ошибаются чаще всего.

Обновлено: 5 мин чтения

Регулярные выражения есть почти везде: в 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.

Чек-лист

  • Шаблон привязан к началу и концу строки, если это проверка формата.
  • Спецсимволы экранированы.
  • Кириллица и буква ё учтены.
  • Протестированы и правильные, и неправильные примеры.
  • Нет вложенных квантификаторов, опасных для производительности.

Частые вопросы

Как в регулярном выражении найти русские буквы?

Используйте класс [а-яА-ЯёЁ]. Букву ё нужно указывать отдельно: в таблице Unicode она стоит вне диапазона а–я. В современных движках можно использовать \p{Script=Cyrillic} с флагом u.

Чем жадный квантификатор отличается от ленивого?

Жадный (.*) захватывает как можно больше символов, ленивый (.*?) — как можно меньше. Например, в строке <b>1</b><b>2</b> шаблон <b>.*</b> найдёт всю строку, а <b>.*?</b> — только <b>1</b>.

Можно ли проверить email регулярным выражением?

Можно проверить, что строка похожа на email, но полностью проверить корректность адреса по стандарту регулярным выражением непрактично. Надёжнее простая проверка формата плюс письмо с подтверждением.

Зачем нужны якоря ^ и $?

Они привязывают шаблон к началу и концу строки. Без них проверка \d{6} пропустит строку abc123456xyz, потому что внутри неё есть шесть цифр подряд.

Похожие гайды

Base64 и URL-кодирование: как работают и когда их использоватьBase64 превращает любые байты в безопасный текст, а URL-кодирование делает строку пригодной для адреса страницы. Оба способа обратимы и ничего не скрывают — это не шифрование.Что такое JSON: синтаксис, частые ошибки и как их найтиJSON — текстовый формат обмена данными, который используют почти все современные API и конфигурационные файлы. Синтаксис простой, но строгий: одна лишняя запятая — и файл не читается.Индекс массы тела: как рассчитать ИМТ и правильно понять результатИМТ — простой способ оценить, соответствует ли вес росту. Он удобен для скрининга, но не показывает, из чего состоит вес, поэтому его стоит дополнять другими измерениями.Сколько калорий нужно в день: расчёт нормы по формулеСуточная норма калорий складывается из базового обмена и затрат на движение. Её можно оценить по формуле Миффлина — Сан Жеора, но результат остаётся ориентиром, а не точной цифрой.