DevToolPal
UK

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

Перевіряйте PHP- і Perl-сумісні регулярні вирази на справжньому рушії PCRE2: рекурсія, присвійні квантифікатори, \K та інше.

Працює локально, нічого не завантажується на сервер

Параметри

Тестовий рядок

0 симв. · 0 B

Результат

Тут з’явиться результат

Що робить цей інструмент

Тестер регулярних виразів PCRE перевіряє регулярний вираз на вашому тексті за допомогою справжньої бібліотеки PCRE2 — того самого рушія, який використовують PHP, Perl-подібні інструменти та багато вебсерверів. Збіги підсвічуються, кожен збіг показується з позицією та групами захоплення, а необов’язкова заміна показує результат підстановки в стилі preg_replace.

Перевірка на справжньому рушії важлива, бо регулярні вирази PCRE і JavaScript відрізняються в дрібних, але суттєвих деталях. Шаблон, що працює в браузерному тестері, у PHP може не скомпілюватися або знайти щось інше.

Як користуватися

  1. Введіть шаблон без розділювачів у поле Шаблон PCRE.
  2. Вставте текст для пошуку в поле Тестовий рядок.
  3. Увімкніть потрібні модифікатори: g для всіх збігів (як preg_match_all), i, m, s, x, U, а також u для \w, \d і \b з урахуванням Unicode.
  4. За бажанням заповніть Замінити на, щоб побачити результат підстановки. Використовуйте $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 завантажується один раз, і все виконується у вашому браузері.