Тестувати регулярний вираз

тестує регулярний вираз (regex) на тексті та відображає збіги та захоплені групи

Чому тестувати регулярні вирази?

Тестування регулярних виразів важливе для:

  • Коректності: Переконайтеся, що вираз відповідає потрібному тексту
  • Продуктивності: Оптимізуйте вирази для швидкої роботи
  • Безпеки: Уникайте вразливостей типу ReDoS
  • Читабельності: Переконайтеся, що вираз зрозумілий для інших розробників

Шаблон регулярного виразу

Шаблон — це основна частина регулярного виразу, яка визначає, якому тексту він має відповідати. Основні елементи шаблону:

  • Літерали: Пряме співпадіння символів (abc)
  • Метасимволи: Спеціальні символи з особливим значенням (., *, +, ?)
  • Класи символів: Набори символів у квадратних дужках ([a-z], [0-9])
  • Квантифікатори: Вказують, скільки разів елемент може повторюватися ({n}, {n,}, {n,m})

Параметри регулярних виразів

Параметри (прапорці) змінюють поведінку регулярного виразу:

  • i (ignore case): Ігнорує регістр символів
  • m (multiline): Трактує кожен рядок як окремий (^ та $ відповідають початку та кінцю рядка)
  • s (dotall): Krапка (.) відповідає будь-якому символу, включно з новим рядком
  • u (unicode): Увімкнено підтримку Unicode

Приклади регулярних виразів

Поширені приклади регулярних виразів:

  • Електронна пошта: [a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}$
  • Номер телефону: \+?[0-9\s-]{10,}
  • URL: https?://[^\s]+
  • IP-адреса: \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
  • Дата (YYYY-MM-DD): \d{4}-\d{2}-\d{2}

Групи захоплення

Групи захоплення дозволяють виділити та витягти частини тексту, які відповідають певним частинам регулярного виразу:

  • Захоплювальна група: (pattern) — захоплює текст для подальшого використання
  • Незахоплювальна група: (?:pattern) — групи без захоплення
  • Іменована група: (?<name>pattern) — група з іменем для зручного доступу

Приклад: (\d{4})-(\d{2})-(\d{2}) захоплює рік, місяць і день у окремі групи.

ReDoS атаки

ReDoS (Regular Expression Denial of Service) — це тип атаки, при якому спеціально сконструйований вхідний текст може спричинити надмірне навантаження на обробку регулярного виразу.

Уникайте таких шаблонів:

  • (a+)+ — еспоненційна складність
  • (a|aa)+ — те саме
  • (.*a){x} for x > 10

Використовуйте інструменти для аналізу безпеки регулярних виразів перед використанням у виробничому коді.

Поширені запитання

Чому мій регулярний вираз не працює?

Найпоширеніші причини:

  • Неекрановані спеціальні символи
  • Неправильні квантифікатори
  • Забули прапорці (наприклад, для чутливості до регістру)
  • Проблеми з кодуванням тексту

Як екранувати спеціальні символи?

Використовуйте зворотний слеш (\\) перед спеціальними символами: \., \*, \+, \?, \|, \, (, ), [, ], {, }.

Приклад запиту

curl -X POST https://cdrn.fr/api/v1/tools/regex-tester/execute \
  -H "Content-Type: application/json" \
  -d '{"pattern":"...","subject":"...","flag_i":false,"flag_m":false,"flag_s":false,"flag_u":true}'

Схема вхідних даних

Поле Тип Обов'язкове За замовчуванням
pattern string
subject text
flag_i boolean false
flag_m boolean false
flag_s boolean false
flag_u boolean true

Точки доступу

  • GET https://cdrn.fr/api/v1/tools - перелічує всі доступні інструменти
  • GET https://cdrn.fr/api/v1/tools/regex-tester - отримує схему цього інструменту
  • POST https://cdrn.fr/api/v1/tools/regex-tester/execute - виконує цей інструмент з JSON-payload