Регулярные выражения — рецепты и командная строка
Предыдущие шаги: введение → синтаксис → группы → проверки → флаги.
Как пользоваться этой статьей
Каждый рецепт — стартовая точка, не идеальный стандарт. Перед продакшеном проверьте на своих данных в лаборатории или на regex101.com.
Формат разбора:
- Шаблон — что вводить;
- Разбор — смысл блоков;
- Команда — где применить в терминале (если уместно).
Email (упрощённо)
Проверка поля формы:
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
| Блок | Смысл |
|---|---|
^...$ | вся строка — один адрес |
[a-zA-Z0-9._%+-]+ | локальная часть до @ |
@ | разделитель |
[a-zA-Z0-9.-]+ | домен |
\.[a-zA-Z]{2,} | точка и зона (ru, com, …) |
Реальные адреса бывают сложнее; для UI-формы этого часто достаточно.
Телефон +7
Поиск в тексте:
\+7\s?\(?\d{3}\)?\s?\d{3}[-\s]?\d{2}[-\s]?\d{2}
Строгий формат +7 916 555-12-34:
\+7\s(\d{3})\s\d{3}-\d{2}-\d{2}
Группа 1 — код города. Разбор скобок — в 1112.
URL
https?://[^\s<>"]+
| Блок | Смысл |
|---|---|
https? | http или https |
:// | буквально |
[^\s<>"]+ | символы до пробела/кавычек |
Дата в разных форматах
Поиск в тексте:
\b\d{1,2}[./-]\d{1,2}[./-]\d{2,4}\b
\b — граница «слова», чтобы не ловить цифры внутри длинного числа.
Строго ДД-ММ-ГГГГ:
^(?<day>\d{2})-(?<month>\d{2})-(?<year>\d{4})$
Строка лога
2026-01-22 14:30:05 [ERROR] Connection timeout
^(\d{4}-\d{2}-\d{2})\s+(\d{2}:\d{2}:\d{2})\s+\[(\w+)\]\s+(.+)$
Команда — только строки с ERROR:
grep -E '\[ERROR\]' application.log
С ripgrep по проекту:
rg -n '\[ERROR\]' logs/
Подробнее про rg: продвинутый софт.
IPv4 (черновик)
\b(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\b
Находит похожие на IP последовательности, в том числе 999.999.999.999. Для строгой проверки — разбор октетов в коде. Пресет IPv4 в лаборатории.
Повтор слова (опечатка)
\b(\w+)\s+\1\b
\1 — то же слово, что в группе 1. Подробнее — 1112.
Хештег
#[\w\u0400-\u04FF]+
\w — латиница; добавлен диапазон кириллицы для тегов вроде #новости.
Серийный номер
\b[A-Z]{3}-\d{4}-[A-Z]{2}\b
Пример: ABC-2026-XZ.
HTML-теги (грубо)
<[^>]+>
Удаляет простые теги без вложенных < внутри. Вложенная разметка — задача парсера, не regex.
Командная строка
grep
| Задача | Команда |
|---|---|
| Регулярное выражение (ERE) | grep -E 'WARN|ERROR' file.log |
| Без учёта регистра | grep -Ei 'error' file.log |
| Номера строк | grep -En 'pattern' file.log |
| Обратный фильтр | grep -Ev 'DEBUG' file.log |
Без -E символы +, ?, | могут трактоваться иначе (зависит от системы).
ripgrep (rg)
rg -n 'TODO|FIXME' --type py
rg -i 'connection timeout' .
rg --glob '*.log' '\[ERROR\]'
Быстрый поиск по дереву папок; по умолчанию уважает .gitignore.
sed (осторожно)
Замена первого вхождения в строке:
sed -E 's/(\d{4})-(\d{2})-(\d{2})/\3.\2.\1/' dates.txt
Перед массовой заменой — копия файла или прогон на тестовом фрагменте.
PowerShell (Windows)
Select-String -Path 'C:\logs\*.log' -Pattern '\[ERROR\]'
Bash — условие
if [[ $file =~ ^data_[0-9]{4}\.csv$ ]]; then
echo "Подходит под шаблон бэкапа"
fi
См. справочник Bash.
Различия движков (кратко)
| Возможность | JavaScript | .NET | grep -E |
|---|---|---|---|
\d, \w | да | да | да (GNU) |
Именованные группы (?<n>…) | да | да | зависит от версии |
Lookbehind (?<=…) | да | да | ограниченно |
Флаг g (все совпадения) | да | через Matches | N/A |
Ленивый *? | да | да | да |
Всегда смотрите документацию своего инструмента.
Типичные ошибки новичка
| Ошибка | Что происходит | Что делать |
|---|---|---|
Забыли ^ $ в форме | xok проходит как email с ok внутри | якоря для валидации |
| Точка без экранирования | . = любой символ | \. для IP и домена |
Жадный .* | одно гигантское совпадение | .*? или [^>]* |
\w для русского | кириллица не входит | явный класс символов |
| Парсить JSON/HTML regex | ломается на вложенности | jq, парсер DOM |
| Скопировали шаблон из интернета | ReDoS, лишняя сложность | упростить, протестировать |
| Двойные слэши в коде | \d превратилось в d | raw-строка r"..." / @"..." |
ReDoS — когда regex «зависает»
Шаблон вроде (a+)+$ на длинной строке из букв a может работать экспоненциально долго. В пользовательском вводе избегайте вложенных «жадных» повторов. Подробнее — конечные автоматы.
Рабочий процесс
- Сформулировать задачу словами: «найти уровень в квадратных скобках».
- Собрать шаблон по частям в 1111.
- Проверить на 5–10 реальных строках в лаборатории.
- Перенести в код или
grep/rg. - Добавить комментарий в коде, что ищет шаблон (будущий вы скажет спасибо).
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). Последовательности действий для решения задач. Введение в алгоритмы. Примеры из реальной жизни для понимания, как на самом деле выглядят алгоритмы в программировании. Регулярные выражения — шаблон для поиска и проверки текста. Введение, лаборатория и маршрут обучения для новичков. Как читать шаблон слева направо — литералы, точка, классы символов, квантификаторы, якоря. Разбор логина по частям. Круглые скобки, захват частей строки, обратные ссылки, альтернатива, поиск и замена в редакторе и коде. Опережающие и ретроспективные проверки (lookahead, lookbehind), несколько условий для пароля, цена после знака доллара. Флаги i, m, g и аналоги в .NET; жадные и ленивые квантификаторы; почему .* захватывает слишком много. Универсальный алгоритм обработки - инициализация, загрузка, реакция, логика. Если вы начнёте какой-нибудь курс изучать, вероятнее всего как раз затронете в одной из первых тем алгоритмы сортировки и поиска. Оценка времени и памяти. Алгоритмическая сложность и анализ эффективности программ. Таким образом, нотация Большое O — это не только инструмент для теоретиков, но и практический ориентир для принятия архитектурных решений в самых разных областях разработки. P, NP, экспоненциальное время. Скорость работы программ.Алгоритмы
Тренировка алгоритмического мышления
Регулярные выражения
Регулярные выражения — синтаксис с нуля
Регулярные выражения — группы и замена
Регулярные выражения — проверки вокруг совпадения
Регулярные выражения — флаги и жадность
Алгоритм обработки
Алгоритмы сортировки и поиска
Анализ эффективности алгоритмов
Нотация Большое O
Классы временной сложности алгоритмов