Тестувати регулярний вираз
- Панель керування
- Документація
- API
Чому тестувати регулярні вирази?
Тестування регулярних виразів важливе для:
- Коректності: Переконайтеся, що вираз відповідає потрібному тексту
- Продуктивності: Оптимізуйте вирази для швидкої роботи
- Безпеки: Уникайте вразливостей типу 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