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

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

Разработчику Инженеру Аналитику

Предыдущие шаги: введениесинтаксисгруппыпроверкифлаги.


Как пользоваться этой статьей

Каждый рецепт — стартовая точка, не идеальный стандарт. Перед продакшеном проверьте на своих данных в лаборатории или на 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.NETgrep -E
\d, \wдадада (GNU)
Именованные группы (?<n>…)дадазависит от версии
Lookbehind (?<=…)дадаограниченно
Флаг g (все совпадения)дачерез MatchesN/A
Ленивый *?дадада

Всегда смотрите документацию своего инструмента.


Типичные ошибки новичка

ОшибкаЧто происходитЧто делать
Забыли ^ $ в формеxok проходит как email с ok внутриякоря для валидации
Точка без экранирования. = любой символ\. для IP и домена
Жадный .*одно гигантское совпадение.*? или [^>]*
\w для русскогокириллица не входитявный класс символов
Парсить JSON/HTML regexломается на вложенностиjq, парсер DOM
Скопировали шаблон из интернетаReDoS, лишняя сложностьупростить, протестировать
Двойные слэши в коде\d превратилось в draw-строка r"..." / @"..."

ReDoS — когда regex «зависает»

Шаблон вроде (a+)+$ на длинной строке из букв a может работать экспоненциально долго. В пользовательском вводе избегайте вложенных «жадных» повторов. Подробнее — конечные автоматы.


Рабочий процесс

  1. Сформулировать задачу словами: «найти уровень в квадратных скобках».
  2. Собрать шаблон по частям в 1111.
  3. Проверить на 5–10 реальных строках в лаборатории.
  4. Перенести в код или grep/rg.
  5. Добавить комментарий в коде, что ищет шаблон (будущий вы скажет спасибо).

← К оглавлению раздела «Регулярные выражения»

См. также

Другие статьи этого же раздела в боковом меню (как на странице «О разделе»).