Перейти к содержанию
Innovialabs

Регулярные выражения для начинающих: шпаргалка по синтаксису

Основы4 мин

Коротко

Регулярное выражение — это шаблон для поиска текста, собранный из классов символов, квантификаторов, якорей и групп; освоив эти четыре блока, вы прочитаете большинство регулярок.

Что такое регулярное выражение

Регулярное выражение (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, cb
[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|ba или 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)XX, если перед ним стоит Y
(?<!Y)XX, если перед ним не стоит Y

Классический пример — проверка пароля: ^(?=.*\d)(?=.*[a-z]).{8,}$ — минимум 8 символов, хотя бы одна цифра и одна строчная буква. Lookbehind поддерживается не во всех движках, а некоторые ограничивают его длину.

Флаги

  • i — без учёта регистра;
  • g — найти все совпадения (JavaScript);
  • m — ^ и $ работают для каждой строки текста;
  • s — точка совпадает и с переводом строки;
  • u — режим Unicode (JavaScript).

Как тестировать регулярки

  1. Пишите шаблон в онлайн-тестере вроде regex101 или RegExr: они подсвечивают совпадения и объясняют каждую часть.
  2. Выберите в тестере тот же движок, что в вашем языке.
  3. Соберите список строк, которые должны и не должны совпадать, включая пустую строку и граничные случаи.
  4. Перенесите этот список в unit-тесты, чтобы регулярка не сломалась при правках.

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

Чаще всего из-за экранирования: в строковых литералах обратный слеш нужно удваивать ("\\d") или использовать «сырые» строки, например r"\d" в Python. Вторая частая причина — другой движок или флаги.

Поможем с этим

Если хотите не разбираться самим, а получить результат — этим мы занимаемся каждый день.

Обсудить проект

Читайте также

Есть идея или задача? Расскажите нам

Ответим в течение рабочего дня и предложим решение. Консультация бесплатная.