Що робить цей інструмент
Тестер регулярних виразів PCRE перевіряє регулярний вираз на вашому тексті за допомогою справжньої бібліотеки PCRE2 — того самого рушія, який використовують PHP, Perl-подібні інструменти та багато вебсерверів. Збіги підсвічуються, кожен збіг показується з позицією та групами захоплення, а необов’язкова заміна показує результат підстановки в стилі preg_replace.
Перевірка на справжньому рушії важлива, бо регулярні вирази PCRE і JavaScript відрізняються в дрібних, але суттєвих деталях. Шаблон, що працює в браузерному тестері, у PHP може не скомпілюватися або знайти щось інше.
Як користуватися
- Введіть шаблон без розділювачів у поле Шаблон PCRE.
- Вставте текст для пошуку в поле Тестовий рядок.
- Увімкніть потрібні модифікатори: g для всіх збігів (як preg_match_all), i, m, s, x, U, а також u для
\w,\dі\bз урахуванням Unicode. - За бажанням заповніть Замінити на, щоб побачити результат підстановки. Використовуйте
$1або${1}для нумерованих груп,${name}для іменованих і$0для всього збігу.
Для некоректних шаблонів показується власне повідомлення про помилку PCRE2 і позиція в шаблоні, де розбір зупинився.
Приклад
Шаблон за замовчуванням \((?:[^()]++|(?R))*\) знаходить збалансовані дужки. Він збігається з парою дужок, усередині яких або символи, що не є дужками, або — рекурсивно — знову весь шаблон. У прикладі тексту він знаходить (a, g(b, c)) і ((x), y) та ігнорує незакриту дужку в кінці. Регулярні вирази JavaScript не можуть цього виразити.
Спробуйте (?<amount>\d+(?:\.\d+)?)\s+(?<cur>USD|EUR) із заміною ${cur} $1, щоб поміняти місцями суми й коди валют у другому рядку.
Можливості PCRE, які варто знати
- Присвійні квантифікатори (
*+,++,?+) та атомарні групи ((?>...)) ніколи не віддають те, що вже захопили, і це запобігає некерованому бектрекінгу. \Kскидає початок збігу — проста альтернатива ретроспективній перевірці (lookbehind).- Рекурсія через
(?R),(?1)або(?&name)знаходить вкладені структури. - Вбудовані модифікатори, як-от
(?i), змінюють поведінку для частини шаблону.
Поради
- У PHP обгорніть шаблон розділювачами на кшталт
/.../або~...~і виберіть такі, яких немає в шаблоні, щоб не доводилося їх екранувати. - Увімкніть u, коли текст містить літери з діакритикою, кирилицю чи символи CJK, щоб
\wз ними збігався.
Часті запитання
› Чим цей інструмент відрізняється від тестера регулярних виразів JavaScript?
Ця сторінка запускає PCRE2 — рушій, на якому працюють функції preg_ у PHP, Nginx, Apache та багато інших інструментів, — скомпільований у WebAssembly. Він підтримує синтаксис, якого немає в JavaScript: рекурсію через (?R), присвійні квантифікатори на кшталт a++, атомарні групи, \K, групи (?P<name>...) та модифікатори x і U.
› Чи потрібно вводити розділювачі, як-от /pattern/i?
Ні. Введіть лише шаблон, а модифікатори вмикайте прапорцями. У PHP `preg_match('/\d+/i', $s)` відповідає шаблону `\d+` з увімкненим «Без урахування регістру».
› Чому я отримав «match limit exceeded»?
Деякі шаблони, наприклад ^(a+)+$ на довгому рядку без збігу, виконують експоненційну кількість повернень (backtracking). Тестер зупиняється після п’яти мільйонів кроків, щоб сторінка не зависала. У PHP є схожий запобіжник, pcre.backtrack_limit, і коли його досягнуто, preg_match повертає false.
› Чи вивантажується мій текст на сервер?
Ні. Модуль PCRE2 WebAssembly завантажується один раз, і все виконується у вашому браузері.