ГлавнаяИнструментыТестер регулярных выражений с разбором по-русски

Тестер регулярных выражений с разбором по-русски

Впишите шаблон и текст — инструмент подсветит совпадения, соберёт таблицу с позициями и группами и покажет, во что превратится текст после замены. Главное здесь справа: свой токенизатор идёт по выражению и переводит каждый кусок на русский, так что \d{2,4} читается как «цифра от 0 до 9, от 2 до 4 раз подряд», а (?=…) — как «дальше должно идти, но в совпадение не войдёт». Ниже идут подсказки, почему шаблон молчит: забытый флаг g, жадная точка, точка без флага s на многострочном тексте, \w на кириллице. Восемь пресетов под российские реалии — телефон в пяти написаниях, ИНН, СНИЛС, ФИО, дата, автономер, почта, адрес — берутся одной кнопкой. Движок здесь браузерный JavaScript, и готовый код можно скопировать под JS, PHP и Python.

/ / g
Впишите шаблон — поиск пойдёт сам.

Текст

пусто

Совпадения подсвечены двумя оттенками по очереди, чтобы соседние не слипались. Пустое совпадение показано вертикальной чертой. Потолок текста — 20 000 символов, показываются первые 500 совпадений.

Разбор шаблона по-русски

Отступ показывает вложенность скобок. Номера групп проставлены так же, как их считает движок: слева направо по открывающей скобке.

Шаблон замены


  

Работают $1…$99, $<имя>, $& для всего совпадения, $` и $' для текста слева и справа, $$ для знака доллара.

СовпадениеПозицияДлинаГруппы по номерамГруппы по именам


  

Код собирается под выбранный режим и текущие флаги. Для Python именованные группы переписываются в (?P<имя>…), ссылки \k<имя> — в (?P=имя), а $1 в замене — в \1. Для PHP берётся разделитель ~ и модификаторы без g.

Проверка идёт браузерным JavaScript

Шаблон уходит в new RegExp вашего браузера, поэтому результат тут — это поведение движка JavaScript. В PHP на PCRE и в модуле re из Python отдельные конструкции работают иначе, и переносить выражение стоит с оглядкой.

\d в JavaScript — всегда ровно [0-9]. В Python \d по умолчанию ловит и арабо-индийские цифры, и цифры других письменностей, пока не поставлен флаг re.ASCII. В PCRE \d расширяется до юникодных цифр с модификатором u вместе с UCP.

\w в JavaScript — латинская буква, цифра и подчёркивание, кириллица сюда не входит никогда. В Python \w берёт буквы любого алфавита, включая русские. В PCRE поведение зависит от модификаторов.

Именованные группы пишутся по-разному: (?<имя>…) в JavaScript и PCRE, (?P<имя>…) в Python. Ссылка на такую группу внутри шаблона — \k<имя> против (?P=имя), а в строке замены — $<имя> против \g<имя>. В preg_replace именованной подстановки нет вовсе, там ставят номер: ${1}.

Ретроспективная проверка (?<=…) в JavaScript принимает выражение любой длины. Python и PCRE требуют фиксированную длину и ругаются на (?<=a+).

Сверхжадные квантификаторы a++ и атомарные группы (?>…) живут в PCRE. В JavaScript и в re из Python такой записи нет: первая даст ошибку разбора, вторая — тоже.

Флаги u и y есть только в JavaScript. В PHP модификатор u означает работу с UTF-8, в Python строки и так юникодные. Знак $ в Python совпадает и перед последним переводом строки, в JavaScript без флага m — только в самом конце.

Как пользоваться

  1. Поле ждёт само выражение: \d{3}-\d{2}. Обрамление /…/ и флаги живут отдельно, флаги ставятся галочками справа. Потолок шаблона — 400 символов.
  2. Флаг g включает поиск всех вхождений, i снимает разницу регистра, m переносит ^ и $ на каждую строку, s разрешает точке ловить перевод строки, u включает Юникод и \p{…}, y ищет только вплотную к прошлому совпадению.
  3. Каждая строка разбора — один кусок шаблона и его смысл по-русски, с отступом по вложенности скобок. Ниже подсказки: они смотрят на связку шаблона, флагов и текста и объясняют типовые промахи.
  4. В режиме замены работают $1, $2 и $<имя>, результат виден целиком. Кнопка внизу отдаёт готовый код под JavaScript, PHP и Python с поправкой на синтаксис именованных групп.

Частые вопросы

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

Браузерный JavaScript: шаблон уходит в new RegExp прямо на вашей странице, никакой сети и никакого сервера. Отсюда и особенности: \d — это ровно [0-9], \w — только латиница с цифрой и подчёркиванием, есть флаги u и y, которых в других языках нет. В PHP и Python часть конструкций ведёт себя иначе, про это на странице есть отдельный блок и поправки в генераторе кода.

Почему шаблон находит только первое совпадение?

Скорее всего не стоит флаг g. Без него движок делает один проход и останавливается на первой удаче: так работают и match в JavaScript, и preg_match в PHP, и re.search в Python. Флаг g включается галочкой, подсказка про него появляется сама, пока галочка снята.

Что за подсказки под таблицей?

Разбор смотрит не только на шаблон, но и на флаги с текстом. Он скажет, что точка не ловит перевод строки без флага s, что \p{L} без флага u читается движком как буквы p и скобки, что \w проходит мимо кириллицы, что диапазон [а-я] не включает ё, что жадная .* тянет до конца строки и что ^ с $ без флага m относятся ко всему тексту целиком.

Зачем ограничены длина текста и длина шаблона?

Из-за катастрофического возврата. Шаблон вроде (a+)+b на строке из тридцати букв «a» перебирает миллиарды вариантов и подвешивает вкладку намертво: остановить уже запущенный exec изнутри JavaScript нечем. Поэтому текст ограничен 20 000 символами, шаблон — 400, число совпадений — 500, а на каждой итерации поиска меряется Date.now. Шаблон с вложенными квантификаторами вдобавок проходит лесенку проб: сначала первые 8 символов текста, потом 16, 24 и дальше по нарастающей. Как только ступень занимает больше 4 миллисекунд, поиск останавливается и вместо результата появляется предупреждение; текста длиннее 2000 символов такой шаблон не получает вовсе.

Как работает режим замены?

Совпадения ищутся тем же проходом, а шаблон замены раскрывается своим кодом: $1…$99 подставляют группы по номеру, $<имя> — по имени, $& — всё совпадение, $` и $' — текст слева и справа, $$ даёт знак доллара. Пустая группа подставляет пустоту. Результат виден целиком, рядом счётчик замен.

Пресеты можно брать в прод как есть?

Их стоит читать как заготовку под свои данные. Телефон покрывает пять типовых написаний, но не ловит запись с добавочным номером; ИНН проверяет только длину в 10 и 12 знаков без контрольной суммы; автономер написан кириллическими буквами, а в выгрузках часто лежит латинская X вместо Х; адрес обрывается на первом пробеле и может прихватить точку в конце предложения. Разбор справа показывает, что именно делает каждый кусок, и подогнать шаблон под свой случай проще.

Чего инструмент не делает?

Он не рисует схему конечного автомата, не показывает шаги перебора и не подбирает выражение по примерам текста. Проверка идёт одним движком — браузерным; поведение PCRE и модуля re из Python здесь не эмулируется, генератор кода лишь переписывает то, что переписывается однозначно. Флаг y работает, но в отрыве от lastIndex смысла в нём немного, и подсказка про это скажет.

Похожие инструменты

Генератор QR-кода

Ссылка, текст, телефон или Wi-Fi → QR-код с настройкой размера и коррекции. Скачать PNG. Кодирование в браузере, без отправки на сервер.

Открыть
Узнать мой IP

Ваш IP, провайдер и локация + что о вас видят сайты: браузер, ОС, устройство, экран, шрифты, WebGL-видеокарта и цифровой отпечаток.

Открыть
Base64 encode / decode

Переводит текст в Base64 и обратно с корректной кириллицей (UTF-8). Построчный режим для списков значений.

Открыть
Генератор фавикона

Из картинки — все нужные размеры иконки, favicon.ico и готовый код для head. Показывает, как иконка выглядит во вкладке.

Открыть
URL энкодер / декодер

Кодирует ссылки и текст в percent-encoding и обратно. Построчно для списка URL, режим компонента или целой ссылки.

Открыть
Конвертер цветов и контраст

HEX, RGB и HSL в одном окне, шкала оттенков одного тона и проверка контраста по WCAG с ответом, годится ли цвет для текста.

Открыть

Ещё инструменты для SEO и маркетинга

Кластеризатор запросов, генераторы sitemap и robots.txt, минус-слова, разметка Schema.org и калькуляторы — в разделе инструментов.