<? phpukraine ІНСТРУМЕНТИ
Пошук по платформі

Regex Tester для PHP (PCRE, preg_match)

Виконує шаблон справжнім PCRE через preg_match, preg_match_all і preg_replace. Підсвітка збігів і таблиця груп.

НА СЕРВЕРІ PHP 8.4 ТЕСТЕР
РОБОЧА ЗОНА
ЩО РОБИТЬ

Перевіряє регулярку саме так, як її виконає PHP

Більшість онлайн-тестерів працюють на рушії JavaScript, і поведінка розходиться з PHP у дрібницях, які потім коштують годину: іменовані групи в іншому синтаксисі, інакше працює прапорець для юнікоду, немає модифікатора x. Цей тестер виконує шаблон справжнім PCRE на сервері через ті самі preg_-функції, тому те, що ви бачите тут, збігається з поведінкою у вашому коді.

ЯК ЦЕ ПРАЦЮЄ В PHP

preg_match знаходить перший збіг і повертає 1 або 0, preg_match_all знаходить усі й повертає їхню кількість. Обидві функції складають групи в масив: числові за порядком дужок, іменовані ще й за ключем. Позиції збігів доступні з прапорцем PREG_OFFSET_CAPTURE, і саме вони показані в таблиці нижче.

$pattern = '/(?P<user>[\w.]+)@(?P<host>[\w.]+)/u';

if (preg_match_all($pattern, $text, $m, PREG_SET_ORDER)) {
    foreach ($m as $hit) {
        echo $hit['user'], ' на ', $hit['host'], PHP_EOL;
    }
}

// Завжди перевіряйте результат: false означає помилку в шаблоні,
// а 0 — що збігів немає. Це різні речі.
ОБЕРЕЖНО

Складні регулярки з вкладеними квантифікаторами на довгому тексті призводять до катастрофічного бектрекінгу: запит вішає процес. У PHP є ліміт pcre.backtrack_limit, і при його перевищенні preg_match повертає false, а не помилку. Якщо не перевіряєте результат, це виглядає як «збігів немає». Інструмент працює з жорстким лімітом, тому такий шаблон тут одразу впаде з поясненням.

ПИТАННЯ

Що питають про цей інструмент

Перевірте роздільники й екранування. У PHP шаблон це рядок, тому зворотні слеші треба або подвоювати в подвійних лапках, або писати в одинарних. Ще одна класика: роздільник / усередині шаблону без екранування; тоді краще взяти інший роздільник, наприклад #.

ДАЛІ ПО ТЕМІ