Перейти к основному содержимому

Регулярные выражения

Разработчику Аналитику Тестировщику Архитектору Инженеру

RegExp - поиск и проверка текста по шаблону

Обычный поиск в редакторе ищет точную фразу: слово ошибка найдёт только его. Регулярное выражение (RegEx, "регэксп") описывает правило — "строка, где после даты идет слово ERROR" или "логин из 3–16 латинских букв, цифр и дефиса".

Программа сравнивает текст с шаблоном слева направо, символ за символом. Если правило подошло — это совпадение (match). Одно выражение можно применить к тысячам строк в логе, к полю формы или к поиску по проекту.

RegExp (Regular Expression) — устойчивое имя в документации языков и инструментов. В разговоре говорят "регэксп", "регулярка". Синтаксис похож между Python, JavaScript, C#, grep, но детали (флаги, lookbehind, \w для кириллицы) различаются — всегда сверяйтесь с движком, который запускаете.

Типичные задачи:

  • проверить, что пользователь ввёл email или пароль нужного вида;
  • вытащить дату, IP или уровень из строки лога;
  • найти в коде все TODO или номера телефонов;
  • заменить формат даты во всём файле.
С чего начать новичку

Идите по порядку — сначала "как читать шаблон", потом группы и замена, затем продвинутые приёмы и готовые рецепты.

Для быстрого старта с копируемыми шаблонами — Regex — готовые паттерны (email, телефон, лог, разбор по символам).

Теорию автоматов можно отложить — она в конце маршрута.


Маршрут обучения

ШагСтатьяО чём
1Синтаксис с нуляЛитералы, ., [], *+?{}, ^$, разбор логина по частям
2Группы и замена(), захват, \1, замена в редакторе и коде
3Проверки вокруг совпадения(?=...), (?<=...), (?:...)
4Флаги и жадностьРегистр, многострочность, .* против .*?
5Рецепты и командная строкаЛоги, email, grep, ripgrep, типичные ошибки
6Regex — готовые паттерныКопируемые шаблоны с разбором и кодом Python/JS

После шагов 1–2 откройте лабораторию ниже и прогоните пресеты Email, Дата, Строка лога. Те же шаблоны с пошаговым разбором — в разделе "Примеры".


Лаборатория

Поэкспериментируйте с шаблоном на живом тексте: подсветка совпадений, группы, режим "вся строка подходит" (как при валидации формы). Дополнительно — regex101.com (другие движки и пошаговое объяснение).

Чит-лист: cheatsheets.zip/regex

Play ITЗагрузка интерактивного демо…


Пресеты в лаборатории

ПресетЧто тренировать
EmailПроверка всей строки (^$)
Дата ДД-ММ-ГГГГИменованные группы (?<day>…)
Строка логаНесколько групп в одной строке
IPv4Поиск всех вхождений в тексте
Жадный и ленивыйПочему .* "съедает" лишнее

Где применяют в работе

МестоПример
Редактор (VS Code, Cursor)Поиск/замена с включённым .*продвинутый софт
grep -E, rgrg -n 'ERROR|WARN' logs/рецепты, ripgrep
Код (C#, JS, Python…)Regex.IsMatch, re.matchC#
ExcelXПОИСК с шаблоном — текст и таблицы

Два режима — "найти кусок" и "проверить всю строку"

РежимЯкоряПример шаблонаСтрокаРезультат
Поиск в текстебез ^ $ERROR2026-01-22 ERROR timeoutсовпадение есть
Валидация поля^$^ok$not ok reallyнет
Валидация поля^$^ok$okда

Поиск в тексте — шаблон ищет подстроку где угодно. Валидация поля (форма, одна строка из API) — якоря ^ в начале и $ в конце задают "вся строка целиком подходит под правило".

Подробный разбор якорей и квантификаторов — в статье про синтаксис. Жадность и флаги m / i — в флаги и жадность.


Границы инструмента

RegEx в строгом смысле описывает регулярные языки (тип 3 в иерархии Хомского) — то же, что конечный автомат. Шаблон хорошо ловит формат телефона или токен в логе. Вложенные скобки ((())), разбор всего HTML или JSON целиком требуют парсера.

ЗадачаПодходит regex?
Email / телефон (упрощённо)часто да
"Сбалансированы ли скобки"нет — нужен стек
HTML/XML целикомнет — нужна грамматика

Слишком хитрые шаблоны с вложенными + и * могут тормозить (ReDoS) — см. конечные автоматы.

Углублённая теория: Теория алгоритмов — формальные основыМагазинные автоматы, Мили и Мура.


Справочник метасимволов

Полный разбор с примерами — в Регулярные выражения — синтаксис с нуля и Регулярные выражения — рецепты и командная строка.

СимволСмысл
.Любой символ, кроме перевода строки
[abc], [a-z]Один символ из набора или диапазона
[^0-9]Один символ не из набора
*, +, ?0+, 1+, 0 или 1 повтор предыдущего
{3}, {2,5}Ровно 3; от 2 до 5 повторов
^, $Начало и конец строки (с оговорками при флаге m)
\d, \w, \sЦифра; "слово" (часто латиница); пробел
(...)Группа и захват фрагмента
|Или: cat|dog

Дальше: Синтаксис с нуля →