Regex и сопоставление шаблонов

сравнение движков регулярных выраженийPCRE2 и RE2 на практике

Выберите реализованный движок, введите шаблон и текст, затем запустите локальную проверку.

сравнение движков регулярных выражений

Шаблон

Введите только тело шаблона без разделителей /. RE2 всегда использует Unicode внутри.

Тестовый текст

Результат

Введите данные или запустите тест.

Шаблон и текст обрабатываются локально в Worker браузера и не загружаются на сервер.

Параметры

Введите данные или запустите тест.

Матрица возможностей

Здесь запускаются PCRE2 и RE2. Другие языки указаны для справки.

ЦельВыполнениеПросмотр назадОбратная ссылкаГраница
PCRE2РаботаетДаДаPCRE2 WASM; обёртка PHP отдельно.
RE2РаботаетНетНетRE2 WASM; не среда Go/Rust.
PHP / PCRE2Только ядро PCRE2ДаДаPHP preg_* добавляет разделители и возвраты.
JavaТолько справкаДаДаJava здесь не запускается.
GoТолько справкаНетНетGo regexp — другая реализация.
RustТолько справкаНетНетRust regex — другая реализация.
.NETТолько справкаДаДа.NET здесь не запускается.

Если шаблон из PHP переносится в Go, успешная подсветка JavaScript ещё не доказывает совместимость. Сравнение движков регулярных выражений показывает реальную компиляцию двух библиотек.

Обычный тестер регулярных выражений может выполнять JavaScript, хотя нужны PCRE2 regex или регулярные выражения Go. Регулярные выражения Java требуют отдельной среды; матрица отличает справку от теста.

Зачем нужно сравнение движков регулярных выражений

Один текст показывает реальное различие компиляции.

Два настоящих движка

Сравнение движков регулярных выражений не подменяет исполнение переименованным JavaScript. Просмотр назад работает в PCRE2, а RE2 возвращает ошибку.

PCRE2 выделяет символ, а RE2 показывает ошибку синтаксиса для того же условного шаблона.

Старый отчёт нельзя экспортировать

При смене движка, шаблона, текста или параметров копирование и загрузка отключаются до нового запуска.

После смены входных данных отчёт бледнеет и его экспорт заблокирован.

Как сравнить без ложного вывода

01

Ввести тело шаблона

Наберите (?<=a)b без разделителей /. Перед загрузкой примера видны перезаписываемые поля; после применения доступна одна отмена.

  • Пустой шаблон проверяется только по явной команде.
02

Выбрать реальный движок

Изначально выбран PCRE2; RE2 работает как отдельный WASM-модуль. i и m выключены.

  • Автозапуска нет; Ctrl/Cmd+Enter выполняет проверку.
03

Проверить позиции и группы

Индексы начинаются с нуля, измеряются в единицах UTF-16, конец не включён. На экране добавляется по 50 строк, а JSON содержит все допустимые результаты.

  • При превышении лимита частичный результат нельзя выгрузить.

Что видно в результате

Подлинные ошибки

PCRE2 принимает просмотр назад и обратные ссылки; RE2 их отвергает без подмены движка.

Группы и Unicode-позиции

Показаны номерные и именованные группы. Индексы RE2 в кодовых точках переводятся в UTF-16 для подсветки после emoji.

Ограниченный запуск

Worker можно остановить, через две секунды он завершается. Превышение размера или числа совпадений отменяет результат.

Что именно проверяется

PCRE2 не равен всему PHP
Выполняется ядро PCRE2 без разделителей и формата возврата функции preg_match.
RE2 не равен Go и Rust
У Go regexp и Rust regex собственные реализации. Их строки в матрице — справка.
Только поиск совпадений
Замена, извлечение и разделение не входят в первую версию: синтаксис замены различается.
Превышение лимита отменяет результат
Текст до 100000 единиц UTF-16, шаблон до 2000, совпадений до 1000, отчёт до 2000000; тайм-аут две секунды.

Вопросы про сравнение движков регулярных выражений

Какой движок регулярных выражений используется?

Сравнение движков регулярных выражений по умолчанию использует PCRE2. PHP основан на нём, но функции preg_* здесь полностью не имитируются.

Почему выражение работает в JavaScript, но не в Go?

JavaScript допускает конструкции, которые RE2 отвергает, например просмотр назад. Для Go проверьте итог также в пакете regexp.

Поддерживает ли Go просмотр назад?

Нет. RE2 выдаёт ошибку компиляции, и страница показывает её без подмены движка.

Чем PCRE2 отличается от Java regex?

Не всегда. Правила Unicode, флаги и группы зависят от библиотеки; проверяйте в целевом языке.

Можно ли использовать одно выражение в разных языках?

Локально выполняются только PCRE2 и RE2. Java и .NET указаны в справочной матрице.

Остались вопросы?

Начать сравнение движков регулярных выражений

Загрузите пример различия и проверьте один текст сначала в PCRE2, затем в RE2.

Шаблон и текст остаются в браузере и не отправляются автоматически.