Где работает RegExio · Точность в каждом символе

Четыре фронта, где паттерн решает всё

От сырых логов в petabyte-хранилищах до валидации полей на клиенте — разбор реальных задач, где RegExio превращает «рабочий, но страшный» regex в контракт с измеримой стоимостью.

§ 0.1

Аналитика логов

Поиск по 120 ТБ журналов без полного скана и без перебора бэктрекингом.

§ 0.2

Безопасность

Защита от ReDoS: ловля патологических паттернов до того, как они попадут в WAF.

§ 0.3

ETL и парсинг

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

Кейс 01 · Аналитика логов

Ускорение поиска на 400% в кластере Elasticsearch

Команда платформы мониторинга искала инциденты по шаблонам, которые деградировали до O(n·m) на длинных строках.

Паттерн (.*)+ERROR в пайплайне агрегации гасил ноды при пиках. RegExio переписал его в линейный вариант, показал узел деградации и дал отчёт parity по RE2 и PCRE.

  • Пиковое время запроса: 4,2 с → 0,8 с на том же входе
  • Снижение CPU на узлах индекса на 61% за неделю
  • Паттерн провален по backtracking ещё на стадии ревью
Оценка: линейный · O(n)
Панель RegExio с разбором стоимости паттерна для поиска по логам Рис. 02 — разбор стоимости паттерна логов
Кейс 02 · Безопасность

Предотвращение DoS-атак через рекурсию

ReDoS — это не «кто-то ввёл странную строку». Это паттерн, который сам по себе уязвим. RegExio ловит его до деплоя.

waf-rule.pcre — до / после
# До: вложенные кванторы — ловушка
^
([a-zA-Z0-9]+
 *
)*
# после: линейный, без вложенности
^
[a-zA-Z0-9]+
$
// RegExio: худший случай 1e9 → 1e5 шагов
        

Регулярные выражения в правилах WAF и анти-фрода — самая частая причина самоинициированных инцидентов. Один вложенный квантор и вход длиной в килобайт превращают ноду в простой.

  • Сканирование 3 400 правил WAF за 9 минут
  • Найдено 47 паттернов с потенциальным ReDoS
  • Каждый — с точной позицией и готовым переписанным вариантом
Кейс 03 · ETL-пайплайны

Стабильность парсинга неструктурированных данных

Форматы от контрагентов меняются. Паттерн должен переживать их — предсказуемо и с отчётом о каждом извлечённом поле.

§ 3.1

Извлечение полей из писем и PDF

Паттерн на номера счетов и реквизиты, проверенный на 12 000 реальных образцов. RegExio показал два случая, где группа захвата возвращала пустую строку вместо null — и предложил якоря.

§ 3.2

Идиоматичная деградация под нагрузкой

Паттерн, работавший на тестовых выборках, на проде с 40 МБ в сообщении уходил в 6 секунд. Статический анализ показал узел, где цена растёт квадратично; после правки — 210 мс.

§ 3.3

Единый отчёт parity для 4 движков

Spark на JVM и Rust-обработчик в потоке использовали разные движки. RegExio зафиксировал расхождение в поведении именованных групп и предложил каноническую форму, рабочую на всех.

§ 3.4

Версионирование паттернов в репозитории

Каждый паттерн — с историей правок, метрикой стоимости и подписью автора. Ревью — как к коду, только с отчётом о цене исполнения.

Кейс 04 · Фронтенд

Легковесные валидаторы для браузеров

Клиентская валидация — это паттерн, который исполняется на чужом устройстве. Его цена — это время пользователя.

RegExio даёт инструмент, который упаковывает проверенный паттерн в минимальный JS-модуль без зависимостей. Паттерн уже прошёл статический анализ и parity — фронтенд получает не «ещё один regex из головы», а контракт.

  • Размер валидатора: 2,1 КБ gzip на поле
  • Медианное время проверки поля: 0,4 мс на Chrome 121
  • Автогенерация сообщений об ошибке по именам групп
validator.js — генерация из отчёта
// сгенерировано RegExio · v3.2 · 2024-11-08
export const validateIBAN = (s) => {
  if (!/^GB\d{2}[A-Z]{4}\d{6}[0-9A-Z]{8}$/.test(s))
    return { ok: false, field: 'iban' };
  return { ok: true };
};
// cost: O(n) · worst: 22n шагов · parity: OK
        
Карточки кейсов

Метрики, которые мы фиксируем в каждом отчёте

Короткий формат для ревью: паттерн, задача, до/после и стоимость. Ниже — выдержки из реальных задач.

Кейс · L-114

Поиск по 120 ТБ логов

Платформа мониторинга, кластер ES из 42 нод.

до: 4 200 мс · после: 810 мс
CPU: −61% · цена: O(n)

Кейс · S-077

Аудит правил WAF

Банковская инфраструктура, 3 400 правил.

найдено: 47 уязвимых
время аудита: 9 мин
фикс-паттерны: 47/47

Кейс · E-203

Парсинг писем контрагентов

Финтех, 12 000 реальных образцов в выборке.

до: 6 000 мс на 40 МБ
после: 210 мс
parity: 4/4 движка

Кейс · F-041

Клиентская валидация IBAN

Платёжный фронтенд, 14 полей формы.

вес: 2,1 КБ gzip
медиана: 0,4 мс
полей: 14 сгенерировано

Кейс · L-158

Агрегация ошибок в Grafana

Инфраструктурная команда, 600 шаблонов дашбордов.

до: 12 падений/мес
после: 0
паттернов правлено: 38

Кейс · S-092

Анти-фрод на входе API

Маркетплейс, 40 млн запросов/час.

p99 до: 1 900 мс
p99 после: 60 мс
ReDoS: 0 в проде

05 · Вопросы по сценариям

Что спрашивают про конкретные задачи

Работаете ли вы с кластерами Elasticsearch и ClickHouse? +
Да. Для ES мы анализируем паттерны в query DSL и в painless-скриптах, для ClickHouse — в WHERE и regexp_extract. Отчёт parity учитывает, что RE2 и PCRE ведут себя по-разному на длинных строках.
Как вы измеряете «ускорение на 400%»? +
Фиксируем медиану и p99 на том же наборе входов до и после правки паттерна. В кейсе L-114 — это 4 200 мс до и 810 мс после на том же кластере и той же нагрузке.
Можно ли встроить аудит WAF в CI? +
Да. CLI RegExio сканирует директорию с правилами и возвращает отчёт в JSON. Паттерн с потенциальным ReDoS термирует сборку — как линтер, только для регулярных выражений.
Что попадает в сгенерированный JS-валидатор? +
Каноническая форма паттерна, имена групп для сообщений об ошибке и метка стоимости из отчёта. Никаких зависимостей — это 2 КБ gzip на поле, готовое к импорту.
Есть ли ограничения по длине входной строки? +
Статический анализ не зависит от длины. Для динамической проверки на патологических входах мы прогоняем паттерн на выборке до 100 МБ и фиксируем реальную деградацию.
Начните с вашего сценария

Прогоните свой паттерн через все четыре фронта

Вставьте regex из продакшена — получите отчёт о стоимости, parity по движкам и список узлов, которые стоит переписать.