Skip to content

Экспертные регулярные выражения

🧙‍♂️ Экспертные техники регулярных выражений

Эти конструкции полезны для сложных сценариев обработки текста. Они не всегда поддерживаются во всех движках (например, JavaScript, Python, PCRE, .NET могут отличаться).


🧬 1. Балансирующие группы (только .NET)

Позволяют обрабатывать вложенные конструкции без рекурсии.

Пример:

^\((?>[^()]+|\((?<Depth>)|\)(?<-Depth>))*(?(Depth)(?!))\)$

Используется для проверки сбалансированных скобок.


🧠 2. Отрицательные и позитивные lookbehind’ы

Условие, что перед символом есть (или нет) шаблон.

  • (?<=\d{3})abcabc после трёх цифр
  • (?<!\d{3})abcabc, не после трёх цифр

🔃 3. Atomic groups

Предотвращают backtracking.

Пример:

(?>\d+)

Это “жадный” захват — если не сработало, движок не будет пробовать другие варианты внутри группы.


🌀 4. Рекурсия (PCRE)

Вложенные шаблоны:

\((?:[^()]+|(?R))*\)

Используется для обработки вложенных скобок, тегов и пр.


🧾 5. Named capture groups (именованные группы)

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})

Доступ к year, month, day по имени.


📌 6. Inline flags

Изменяют поведение внутри шаблона.

Примеры:

  • (?i) — регистронезависимый режим
  • (?m) — многострочный режим
  • (?s) — точка . включает \n

Пример:

(?i)abc # будет найдено и ABC, и abc

⚠️ 7. Группы с ленивым захватом

Жадный поиск: .*
Ленивый: .*?

Пример:

  • ".*" — захватит всё между первой и последней кавычкой
  • ".*?" — захватит только между ближайшими кавычками

🧠 Советы:

  • Используйте отладчик: regex101.com
  • Проверяйте поддержку: не все движки поддерживают recursion, lookbehind, atomic и т.д.
  • Разбивайте сложные выражения на части