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

тества регулярен израз (regex) върху текст и показва съответствията и заловените групи

За какво се използва тестерът за регулярен израз?

Тестер за регулярни изрази ви позволява да проверите дали шаблон на регулярен израз (regex) съвпада към очаквания текст, без да се налага да стартирате кода на приложението. Поставяме шаблона, поставяме входния текст, ние проверете опциите (флагове) и инструментът незабавно показва списъка с намерени съвпадения както и заловените групи. Това е онлайн еквивалентът на preg_match_all() в PHP, от String.matchAll() в JavaScript или re.findall() в Python.

Регулярните изрази са мощни и трудни. Запетая, неправилно поставени скоби, количествен показател лакомник, който изсмуква твърде много знаци: и извлеченият низ вече не е това, което очаквахме. Тестерът избягва двупосочното пътуване с редактор, терминал и тестов файл: повтаряме модела, докато не видим добър резултат.

Как да напиша модела?

Въведете регулярния израз без разделители. Няма /.../, няма #...#. Например, за да заснемете имейл адреси от текст, просто въведете [\w.+-]+@[\w-]+\.[\w.-]+. Опциите (флагове) се контролират от квадратчета за отметка.

Опцията u (Unicode) е отметната по подразбиране. Почти винаги е желано: без него, \w не разпознава ударения и някои шаблони връщат тиха PCRE грешка на UTF-8 низове.

PCRE опции

  • i (без значение за малки и големи букви): [a-z] също разпознава главни букви.
  • m (многоредов): ^ и $ съответстват на началото и края на всеки ред, плюс само началото и края на целия низ.
  • s (dotall): . също разпознава нови редове. Полезно за шарки който трябва да пресича абзаци.
  • u (unicode): интерпретира модела и темата в UTF-8. От съществено значение веднага след текста съдържа не-ASCII знаци (ударения, емотикони, идеограми).

Често срещани примери за регулярни изрази

  • Имейл адрес: [\w.+-]+@[\w-]+\.[\w.-]+ (опростена форма, достатъчна за повечето практически случаи; строг RFC 5322 е много сложен).
  • HTTP/HTTPS URL: https?://[\w.-]+(?:/[\w./?%&=-]*)?
  • Френски телефонен номер: (?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4}
  • Френски пощенски код: \d{5}
  • ISO дата (ГГГГ-ММ-ДД): \d{4}-\d{2}-\d{2}
  • IPv4 адрес: (?:\d{1,3}\.){3}\d{1,3}
  • Цяла дума: foo (границите на думата избягват съвпадение футбол).
  • Хаштаг: #\w+
  • Номер на семантична версия: \d+\.\d+\.\d+(?:-[\w.-]+)?
  • Twitter ID / X: @\w{1,15}

Заловени групи

Регулярният израз може да съдържа групи в скоби, които изолират част от съвпадението за повторно използване. Например моделът (\w+)@(\w+\.\w+), приложен към alice@example.com улавя две групи: alice и example.com. Инструментът показва тези групи в колона посветен, до всеки мач. Именувани групи ((?P...)) също са изброени, индексирани по име.

За да групираме без прихващане (полезно за прилагане на квантор, без да замърсяваме списъка с групи), ние използва (?:...).

Защита срещу ReDoS

PCRE машината на PHP може да влезе в катастрофално обратно проследяване по определени патологични причини: шаблон като (a+)+$, приложен към дълъг незавършен a низ, може да блокира сървъра за няколко секунди. За да избегнете този отказ на обслужване с регулярен израз (ReDoS), инструментът прилага две ограничения:

  • a set_time_limit(2) от страната на работника (обработката се прекъсва след 2 секунди);
  • намаляване на pcre.backtrack_limit до 100 000, причинявайки бърз неуспех на моделите които изследват твърде много комбинации.

В случай на твърде скъпа причина, инструментът показва съобщението за грешка на PCRE (preg_last_error_msg()), обикновено лимитът за обратно проследяване е изчерпан. Перифразирайте вашето модел, използващ притежателни квантори (a++) или атомни групи ((?>...)), за да избегнете обратно проследяване.

Често задавани въпроси

Защо моят регулярен израз не съвпада, въпреки че работи в JavaScript?

Двигателят на този инструмент е PCRE (PHP), близък до Perl. Синтаксисът е много подобен на JavaScript, но някои характеристики се различават: lookbehinds с променлива дължина, определени псевдоними Уникод или обработката по подразбиране на чувствителността към главни и малки букви. Ако планирате да стартирате страната на шаблона браузър, тествайте и в JS среда.

Защо моят \w не улавя акцентите?

Без флага u \w разпознава само [A-Za-z0-9_]. с u (Unicode), той разпознава всички букви в смисъла на UCD, включително знаци с ударения. За да отидете по-далеч, използвайте Unicode класове: \p{L} (буква), \p{N} (число), \p{P} (пунктуация).

Инструментът запазва ли моя текст?

Не. Моделът и темата се обработват в RAM от PHP работника без постоянство. Няма данни изпратеното не се регистрира.

Какво трябва да направя, ако получа съобщение „Ограничението за обратно проследяване е изчерпано“?

Вашият модел се движи напред-назад твърде много. Потърсете вложени квантори от типа (a+)+ или (\w+)*, които са типични случаи на ReDoS. Заменете ги с едно недвусмислена форма: например \w+ вместо (\w+)*.

Мога ли да тествам многоредов модел?

да Проверете опцията m, така че ^ и $ да разпознаят началото и краищата на всеки ред. Допълнително проверете s, ако искате . да пресече прекъсвания на редове.

Пример за заявка

curl -X POST https://cdrn.fr/api/v1/tools/regex-tester/execute \
  -H "Content-Type: application/json" \
  -d '{"pattern":"...","subject":"...","flag_i":false,"flag_m":false,"flag_s":false,"flag_u":true}'

Входна схема

Поле Тип Задължително По подразбиране
pattern string
subject text
flag_i boolean false
flag_m boolean false
flag_s boolean false
flag_u boolean true

Крайни точки

  • GET https://cdrn.fr/api/v1/tools - изброява всички достъпни инструменти
  • GET https://cdrn.fr/api/v1/tools/regex-tester - извлича схемата на този инструмент
  • POST https://cdrn.fr/api/v1/tools/regex-tester/execute - изпълнява този инструмент с JSON payload