Computer Science

Учебник Регулярные выражения для начинающих

23 урока · 6 разделов · бесплатно, без регистрации

Регулярные выражения (regex) — компактный язык описания текстовых шаблонов. С их помощью одной строкой проверяют формат email, вытаскивают числа и даты из текста, чистят и переформатируют данные, парсят логи. Этот навык универсален: один и тот же синтаксис работает в Python, JavaScript, Java, Go, в редакторах кода и утилитах вроде grep.

Курс ведёт от простого к сложному: от первого вызова re.search до опережающих проверок и борьбы с катастрофическим бэктрекингом. Все примеры — на Python (модуль re входит в стандартную библиотеку), и почти каждый можно запустить прямо в браузере, поменять паттерн и сразу увидеть результат. После курса вы будете уверенно читать и писать регулярки и понимать, где они уместны, а где лучше взять обычный парсер.

Курс «Регулярные выражения» состоит из 6 разделов и 23 уроков: Введение и базовый синтаксис, Классы символов и кванторы, Группы и захват, Поиск и замена, Продвинутые приёмы и Практика и кросс-язык. Уроки идут по порядку — от основ к более сложным темам, в каждом есть объяснение с примерами, а в конце — вопросы для самопроверки. К урокам привязаны задачи с автоматической проверкой: прочитали тему — сразу закрепили её кодом.

Программа курса

  1. 1 Введение и базовый синтаксис

    1. Что такое регулярные выражения и зачем они нужны

      Регулярное выражение — это шаблон для поиска в тексте. Разбираем, какие задачи они решают и почему этот навык универсален для любого языка.

    2. Модуль re: search, match, fullmatch и объект Match

      Основные функции модуля re в Python: search, match, fullmatch. Чем они отличаются и как читать объект Match через group, start, end и span.

    3. Литералы и метасимволы, точка и экранирование

      Различаем литералы и метасимволы в регулярках, разбираем точку как «любой символ» и учимся экранировать спецсимволы обратным слэшем.

    4. Флаги: IGNORECASE, MULTILINE, DOTALL

      Флаги регулярных выражений в Python: re.IGNORECASE для регистронезависимости, re.MULTILINE для многострочного режима, re.DOTALL чтобы точка ловила перенос строки.

  2. 2 Классы символов и кванторы

    1. Классы символов: [...], диапазоны и отрицание

      Классы символов в квадратных скобках: перечисление, диапазоны вроде [a-z] и [0-9], отрицание [^...] и работа с кириллицей в регулярках.

    2. Готовые классы: \d, \w, \s и их заглавные версии

      Сокращённые классы символов в регулярках: \d цифры, \w буквы и цифры, \s пробелы, и их инвертированные версии \D \W \S. Удобные шорткаты на каждый день.

    3. Кванторы: *, +, ?, {n,m}

      Кванторы в регулярных выражениях: звёздочка * (ноль и более), плюс + (один и более), вопрос ? (ноль или один) и фигурные скобки {n,m} для точного количества.

    4. Жадность и лень, границы слов \b и якоря ^ $

      Жадные и ленивые кванторы в регулярках, добавление ? для ленивого режима, граница слова \b и якоря начала ^ и конца $ строки.

  3. 3 Группы и захват

    1. Группировка ( ) и захватывающие группы

      Круглые скобки в регулярках: группировка для квантора и захват частей совпадения, доступ к группам через group(1), group(2) и метод groups().

    2. Именованные и незахватывающие группы

      Именованные группы (?P<name>...) и доступ через group по имени и groupdict, а также незахватывающие группы (?:...) для группировки без захвата.

    3. Обратные ссылки и альтернация |

      Обратные ссылки \1 и \2 для поиска повторов, оператор альтернации | для выбора между вариантами и правильная группировка альтернатив скобками.

  4. 4 Поиск и замена

    1. findall и finditer: все совпадения

      Различие между re.findall и re.finditer: findall возвращает список строк или кортежей, finditer даёт объекты Match с позициями. Когда что использовать.

    2. Замена через sub: группы \1 и \g<name>

      Функция re.sub для замены по регулярке: вставка захваченных групп в результат через \1 и \g<name>, переформатирование дат и нормализация текста.

    3. sub с функцией и split по регулярке

      Замена через функцию в re.sub для сложной логики и разбиение строки на части с помощью re.split по шаблону-разделителю.

    4. Извлечение данных: email, телефоны, даты

      Практическое извлечение email, телефонов и дат регулярками из текста — и честный разговор о пределах: где регулярки достаточно, а где формат слишком сложен.

  5. 5 Продвинутые приёмы

    1. Опережающие и ретроспективные проверки

      Lookahead (?=...) и (?!...) и lookbehind (?<=...) и (?<!...) в регулярках: проверка контекста без его захвата, разделение тысяч и фильтрация по окружению.

    2. Проверка пароля по правилам

      Собираем валидатор пароля на регулярках: несколько lookahead-проверок в одном паттерне для требований к длине, строчным, заглавным буквам и цифрам.

    3. Компиляция re.compile и производительность

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

    4. Катастрофический бэктрекинг (ReDoS)

      Что такое катастрофический бэктрекинг и атака ReDoS: почему вложенные кванторы вешают движок на специально подобранном вводе и как писать безопасные паттерны.

  6. 6 Практика и кросс-язык

    1. Реальные кейсы: парсинг логов и очистка текста

      Практические задачи на регулярках: разбор строки лога на IP, метод и код ответа, удаление HTML-тегов и нормализация текста с группами и заменой.

    2. Диалекты: Python vs JavaScript vs grep

      Отличия регулярок в разных средах: именованные группы и lookbehind в Python и JavaScript, экранирование и базовый/расширенный синтаксис grep, ссылки на группы в замене.

    3. Инструменты и когда регулярки НЕ нужны

      Инструменты для отладки регулярок (regex101 и аналоги) и важное правило: HTML, JSON и вложенные структуры парсят специализированными парсерами, а не регулярками.

    4. Шпаргалка по регулярным выражениям

      Компактная шпаргалка по синтаксису регулярных выражений: метасимволы, классы, кванторы, группы, якоря, проверки и функции модуля re Python в одном месте.