Регулярные выражения
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, типичные ошибки |
| 6 | Regex — готовые паттерны | Копируемые шаблоны с разбором и кодом Python/JS |
После шагов 1–2 откройте лабораторию ниже и прогоните пресеты Email, Дата, Строка лога. Те же шаблоны с пошаговым разбором — в разделе "Примеры".
Лаборатория
Поэкспериментируйте с шаблоном на живом тексте: подсветка совпадений, группы, режим "вся строка подходит" (как при валидации формы). Дополнительно — regex101.com (другие движки и пошаговое объяснение).
Чит-лист: cheatsheets.zip/regex
Play ITЗагрузка интерактивного демо…
Пресеты в лаборатории
| Пресет | Что тренировать |
|---|---|
Проверка всей строки (^ … $) | |
| Дата ДД-ММ-ГГГГ | Именованные группы (?<day>…) |
| Строка лога | Несколько групп в одной строке |
| IPv4 | Поиск всех вхождений в тексте |
| Жадный и ленивый | Почему .* "съедает" лишнее |
Где применяют в работе
| Место | Пример |
|---|---|
| Редактор (VS Code, Cursor) | Поиск/замена с включённым .* — продвинутый софт |
grep -E, rg | rg -n 'ERROR|WARN' logs/ — рецепты, ripgrep |
| Код (C#, JS, Python…) | Regex.IsMatch, re.match — C# |
| Excel | XПОИСК с шаблоном — текст и таблицы |
Два режима — "найти кусок" и "проверить всю строку"
| Режим | Якоря | Пример шаблона | Строка | Результат |
|---|---|---|---|---|
| Поиск в тексте | без ^ $ | ERROR | 2026-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 |
Дальше: Синтаксис с нуля →