Полное практическое руководство по регулярным выражениям (многоязычная и мультистрочная поддержка)

Обзор (Что это)

Это технический справочник по использованию регулярных выражений, ориентированный на практическое применение и переносимость. Охватываются синтаксис, обработка многострочных паттернов, техники замены, совместимость с инструментами и проектирование поддерживаемых шаблонов.

Цель (Зачем это нужно)

Регулярные выражения — основа обработки текста: валидации, парсинга, трансформации и извлечения данных. Используются во всех языках программирования и на всех платформах. Грамотное использование позволяет эффективно автоматизировать процессы и структурировать данные.


Part 1: Базовый синтаксис

Шаблон Значение Пример Совпадения
. Любой символ, кроме новой строки a.c abc, a-c
* 0 или более повторений предыдущего go*gle ggle, google
+ 1 или более повторений go+gle gogle, google
? 0 или 1 повторение colou?r color, colour
{n} Ровно n повторений a{3} aaa
{n,m} От n до m повторений a{2,4} aa, aaa, aaaa
^ Начало строки ^abc Строка, начинающаяся с abc
$ Конец строки abc$ Строка, заканчивающаяся на abc
[] Один из символов [abc] a, b, c
[^] Любой символ, кроме указанных [^0-9] Все, кроме цифр
\d Цифра \d+ 123, 007
\D Не цифра \D+ abc, XYZ
\w Буква, цифра или _ \w+ abc_123
\W Не буква/цифра/_ \W+ #@!, пробелы и т.п.
\s Пробельный символ \s+ Пробел, табуляция, \n и др.
\S Непробельный символ \S+ abc, 123
` ` Логическое ИЛИ `foo
() Группировка (abc)+ abcabc
\b Граница слова \bregex\b Только слово "regex"

Part 2: Практические шаблоны (многоязычная поддержка)

Назначение Шаблон Примечание
Только цифры ^\d+$ Полностью цифровая строка
Дробное число ^\d+\.\d+$ Одна точка допустима
Только латиница и цифры ^[a-zA-Z0-9]+$ Для ID или логинов
Email (упрощённо) ^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,}$ Общее применение
URL (http/https) https?://[\w.-]+\.[a-zA-Z]{2,}(/[\w./?=&%-]*)? С путём и параметрами
Дата ISO \d{4}-\d{2}-\d{2} ГГГГ-ММ-ДД
Международный телефон \+\d{1,3}[\s-]?\d{1,14} Пример: +7 912...
Имя пользователя ^[a-zA-Z0-9._-]{3,20}$ Для соцсетей и т.п.
Сложный пароль ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ Содержит заглавные, строчные, цифры

Part 3: Многострочные выражения (Multi-Line)

🔹 Почему использовать [\s\S]*?

Так как . не захватывает переводы строк, для охвата многострочных блоков используется:

[\s\S]*?

Это охватывает все символы, включая переводы строк, с минимальным захватом (нежадный режим).

💡 Примечание: В некоторых инструментах допустимо [\s\S\n]*? — избыточно, но полезно для совместимости.

🔹 Частые шаблоны

Назначение Шаблон Комментарий
Любой текстовый блок [\s\S]*? Безопасный способ охвата
HTML-блок <div> <div[\s\S]*?</div> Открывающий и закрывающий div
HTML-комментарии <!--[\s\S]*?--> Комментарии
Markdown-код "[\s\S]*?" Блоки кода в тройных бэктиках

Part 4: Техники замены (Replacement Techniques)

🔹 Синтаксис подстановки групп

В зависимости от инструмента:

  • ${1}, ${2} — VSCode, Python, .NET
  • $1, $2 — JavaScript, sed

🔹 Примеры

Назначение Шаблон Замена
Поменять слова местами (\w+)\s+(\w+) ${2} ${1}
Обернуть в <span> >([^<]+)< ><span>${1}</span><
CSV → JSON ^([^,]+),([^,]+),([^,]+)$ { "a": "${1}", "b": "${2}", "c": "${3}" }
Формат даты (\d{4})/(\d{2})/(\d{2}) ${1}-${2}-${3}
CamelCase → snake_case ([a-z])([A-Z]) ${1}_${2}

Part 5: Совместимость с инструментами

Инструмент Многострочность Нежадность Подстановка Особенности
VSCode ✅ (панель поиска) ${1} [\s\S]*? или [\s\S\n]*?
JavaScript ✅ (s-флаг) $1, $<name> Поддержка имён групп
Python (re) ✅ (re.DOTALL) \g<1> или \1 Используйте raw-строки r""
sed \1, \2 Только базовая замена
grep/egrep Только поиск, без замены

Part 6: Рекомендации по проектированию

✅ Хорошая практика

  • Для многострочных шаблонов используйте [\s\S]*?
  • Избегайте .*, предпочтительнее нежадные выражения
  • Для некаптурирующих групп используйте (?:...)
  • Применяйте именные группы: (?<year>\d{4})
  • Для сложных выражений используйте re.VERBOSE и комментарии

❌ Антипаттерны

Шаблон Проблема
.* Захватывает больше, чем нужно (жадное поведение)
[^a-z] Не подходит для языков с акцентами и Юникодом
Глубокие деревья Не подходит для вложенных HTML/XML
.+ Совпадает даже с пробельными строками

Заключение

Это руководство — универсальный справочник для безопасного и эффективного использования регулярных выражений.
Используйте [\s\S]*? для многострочной обработки, учитывайте особенности используемого инструмента, придерживайтесь читаемого и поддерживаемого стиля.

Грамотно спроектированное регулярное выражение — мощный и переиспользуемый инструмент.

タイトルとURLをコピーしました