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

Проверяйте регулярные выражения: совпадения подсвечиваются цветом, а содержимое групп и результат замены видны сразу.

Регулярное выражение и текст

Флаги

Символов: 0 · строк: 0

Результат

Вид результата

Введите регулярное выражение и текст — совпадения подсветятся цветом.

Всё обрабатывается на этом устройстве. Введённый текст никуда не отправляется.

Работает на регулярных выражениях JavaScript (браузера). Синтаксис может немного отличаться от Python, PHP, Java и других языков.

Пригодилось? Будем рады, если поделитесь

Что-то не работает или есть идея, как сделать лучше?

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

  1. 1. Введите регулярное выражение

    В поле «Регулярное выражение» введите шаблон, который нужно найти. Неудобные для набора символы вроде \d и [ ] вставляются в позицию курсора кнопками под полем. Можно и выбрать готовый шаблон — email, дату и другие — в списке «Выбрать готовый шаблон». Кнопка «Разбор» в правом верхнем углу поля покажет, с чем совпадает каждая часть.

  2. 2. Введите текст

    В поле «Текст для проверки» ниже вставьте или наберите текст, в котором нужно искать (кнопка «Пример» подставит пример текста). В блоке «Результат» под ним сразу подсветятся совпадения и появится их число.

  3. 3. Переключите флаги и посмотрите список совпадений

    Выключите «g Все» в блоке «Флаги», чтобы искать только первое совпадение (включите снова, чтобы искать все). В блоке «Список совпадений» ниже для каждого совпадения показаны позиция и содержимое групп ($1, <year> и т. п.). Нажмите на строку, чтобы выделить это место в тексте выше.

  4. 4. Извлеките только совпадения

    Вверху блока «Результат» выберите «Извлечь» — совпадения выстроятся по одному на строку. Если в выражении есть группы, в списке «Совпадение целиком» можно выбрать только одну, например <year>. Включите «Без повторов», чтобы одинаковые остались по одному; «Копировать извлечённое» копирует результат, а «Сохранить как текст» сохраняет его в файл.

  5. 5. Попробуйте замену и скопируйте

    Вверху блока «Результат» выберите «Замена» и введите в поле «Заменить на», например, $<day>/$<month>/$<year> — текст с заменой сразу появится. Нажмите «Копировать результат», чтобы скопировать его.

Когда пригодится

  • Проверить, правильно ли написана регулярка

    Прежде чем вставлять её в код, по цвету сразу видно, находит ли она только нужное и не цепляет ли лишнего. Когда всё готово, выберите язык — Python, PHP, Go и другие — и скопируйте выражение в виде, готовом для вставки в код.

    Веб-разработчики и те, кто учится программировать

  • Разобраться в чужой регулярке

    Вставьте выражение из доставшегося кода или статьи и нажмите «Разбор» — коротко, по частям, будет показано, с чем совпадает каждая, например «Одна цифра, повторов: 4».

    Те, кто читает код, и те, кто учится программировать

  • Вытащить данные из логов или таблиц

    Найдите email, даты или номера заказов, выстройте их по одному на строку в режиме «Извлечь» и скопируйте или сохраните в текстовый файл.

    Аналитики данных и сотрудники поддержки

  • Собрать только часть из группы, без повторов

    Можно извлечь только то, что в ( ), например домен из email или хост из URL. С включённым «Без повторов» то, что встречается много раз, останется в списке по одному.

    Аналитики данных и веб-специалисты

  • Проверить замену перед массовой правкой

    Перед массовой заменой в редакторе или таблице посмотрите, что получится с $1 и другими подстановками.

    Те, кто приводит в порядок тексты и таблицы

  • Сделать проверку полей формы

    Составьте регулярку для проверки индекса или телефона, проверяя её на разных вариантах ввода.

    Те, кто делает формы

Что стоит знать

  • Работает на регулярных выражениях JavaScript. Возможности, которые есть только в Python, PHP, Java или .NET (ревнивые квантификаторы ++, (?i) и т. п.), не поддерживаются.
  • При копировании для другого языка отличия в синтаксисе по возможности исправляются. О том, что исправить нельзя (например, ретроспективная проверка в Go), появится короткое предупреждение — проверьте выражение и в этом языке.
  • Слишком долгий поиск останавливается через 2 секунды с предупреждением. В этом случае уменьшите вложенность повторов.
  • В списке показываются первые 300 совпадений, подсвечиваются и извлекаются первые 5000 (подсчёт всегда идёт до конца).

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

Регулярные выражения описывают форму текста — «четыре цифры подряд», «буквы и цифры с @ посередине» — короткими записями вроде \d{4} или [\w.]+@[\w.]+. Ими пользуются для поиска, замены и проверки ввода во множестве программ и редакторов, но одна небольшая ошибка — и выражение находит не то, что задумано.

Инструмент проверяет выражение при каждом нажатии клавиши с помощью регулярных выражений JavaScript в браузере и подсвечивает совпадения цветом. Для каждого совпадения он показывает содержимое групп (частей в ( )) и именованных групп ((?<имя>…)), чтобы можно было убедиться, что нужная часть извлекается правильно. Даже выражения, которые не завершаются, вроде (a+)+, выполняются отдельно и с ограничением по времени, поэтому страница не зависает.

Чем отличаются флаги
Если включитьКогда пригодится
g (Все)Ищутся все совпаденияИзвлечение, замена всех
i (Без регистра)A и a считаются одной буквойПоиск слов
m (По строкам)^ и $ совпадают с началом и концом строкиПострочная проверка, логи
s (. и перенос)Точка совпадает и с переносом строкиФрагменты на несколько строк
u (Unicode)Эмодзи — один символ, доступен \p{…}Текст с кириллицей и эмодзи

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

Ответы на вопросы, которые часто возникают при проверке регулярных выражений.

Мой текст или регулярное выражение куда-нибудь отправляются?

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

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

Диалект JavaScript (RegExp браузера). Поддерживаются именованные группы (?<имя>…), ретроспективная проверка (?<=…), \p{…} (флаг u) и другое. В Python, PHP, Java и других языках синтаксис может отличаться в мелочах, так что при переносе сверьтесь с документацией нужного языка.

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

Да. В правом верхнем углу поля «Регулярное выражение» выберите язык — JavaScript, Python, PHP, Java, Ruby или Go — и нажмите кнопку копирования: выражение скопируется в виде кода на этом языке. Отличия в синтаксисе исправляются, например (?P<имя>…) в Python, \A и \z в Ruby, (?i) в Go. Если что-то на этом языке не записать, как ретроспективную проверку в Go, под полем появится короткое предупреждение. Выбранный язык запоминается до следующего раза.

Можно вставить выражение в виде /abc/gi?

Да. Если поле «Регулярное выражение» пустое, вставьте что-нибудь вроде /abc/gi — выражение и флаги разделятся сами. А если выбрать «JavaScript» в правом верхнем углу поля и нажать кнопку копирования, текущее выражение скопируется в виде /…/, чтобы сразу вставить его в код на JavaScript.

Можно узнать, что означает выражение?

Нажмите «Разбор» в правом верхнем углу поля «Регулярное выражение»: выражение разделится на части, и для каждой будет показано, с чем она совпадает, например «Одна цифра, повторов: 4» или «Группа year». Содержимое групп показано с отступом, так что можно проверить и то, как сочетаются скобки.

Можно получить список только совпадений?

Выберите «Извлечь» — совпадения выстроятся по одному на строку. Если есть группы, можно выбрать только эту часть ($1, <имя>). «Без повторов» оставляет одинаковые по одному, а результат можно скопировать или сохранить в текстовый файл. Если флаг g выключен, будет только первое совпадение.

Где посмотреть содержимое групп?

В блоке «Список совпадений» справа для каждого совпадения показано содержимое $1, $2… (для именованных групп — <имя>). Группа, которая не совпала, отмечается как «(нет совпадения)».

Что можно использовать при замене?

Выберите «Замена» и используйте в поле «Заменить на» $1, $2… (группы), $<имя> (именованная группа), $& (всё совпадение) и $$ (сам знак $). Если флаг g включён, заменяется всё, если выключен — только первое совпадение.

Появилось «Поиск занял слишком много времени и был остановлен»

У выражений с повтором внутри повтора, как (a+)+ или (.*)*, на несовпадающем тексте объём вычислений может расти взрывообразно (катастрофический возврат). Чтобы страница не зависла, поиск останавливается через 2 секунды. Объедините повторы в один или сузьте набор символов, например [^,]* вместо .*.

Как искать без учёта регистра?

Включите «i Без регистра» в блоке «Флаги». Заглавные и строчные буквы, например A и a или Ж и ж, будут считаться одинаковыми (а вот Е и Ё остаются разными буквами).

^ и $ не совпадают с каждой строкой

По умолчанию ^ и $ совпадают только с началом и концом всего текста. Чтобы они работали для каждой строки, включите «m По строкам» в блоке «Флаги».

Можно искать кириллицу или иероглифы?

Да. С флагом u выражение \p{L} находит буквы любого алфавита, а \p{Script=Cyrillic} — только кириллицу. Для иероглифов выберите «Иероглифы (кандзи)» в списке «Выбрать готовый шаблон»: он использует \p{Script=Han} и сам включает флаг u.

Это бесплатно?

Да, бесплатно. Без регистрации, установки и рекламы. Пользуйтесь сколько угодно и с текстами любой длины.