Testovat regulární výraz
- Dashboard
- Dokumentace
- API
K čemu slouží regex tester?
Regex tester umožňuje ověřit, že vzor regulárního výrazu (regex) skutečně odpovídá
očekávanému textu, bez nutnosti spouštět aplikační kód. Vložíme vzor, vložíme vstupní text, zaškrtneme
volby (flags), a nástroj okamžitě zobrazí seznam nalezených shod
i zachycené skupiny. Je to online ekvivalent preg_match_all() v PHP,
String.matchAll() v JavaScriptu nebo re.findall() v Pythonu.
Regex jsou současně mocné i zrádné. Čárka, špatně umístěná závorka, hladový kvantifikátor, který nasaje příliš znaků: a extrahovaný řetězec už není ten, který se očekával. Tester se vyhýbá tam-zpět s editorem, terminálem a testovacím souborem: iterujeme vzor, dokud nevidíme správný výsledek.
Jak napsat vzor?
Zadejte regex bez delimiterů. Žádné /.../, žádné #...#.
Například pro zachycení emailových adres v textu zadejte pouze
[\w.+-]+@[\w-]+\.[\w.-]+. Volby (flags) jsou kontrolovány zaškrtávacími poli.
Volba u (Unicode) je defaultně zaškrtnuta. Téměř vždy je žádoucí: bez ní
\w nerozpoznává akcenty a některé vzory vrací tichou PCRE chybu na
UTF-8 řetězcích.
PCRE volby
- i (case-insensitive):
[a-z]rozpoznává také velká písmena. - m (multiline):
^a$matchují začátky a konce každého řádku, ne pouze začátek a konec globálního řetězce. - s (dotall):
.rozpoznává také konce řádků. Užitečné pro vzory, které musí procházet odstavci. - u (unicode): interpretuje vzor a subjekt v UTF-8. Nepostradatelné, jakmile text obsahuje ne-ASCII znaky (akcenty, emoji, ideogramy).
Příklady běžných regex
- Emailová adresa:
[\w.+-]+@[\w-]+\.[\w.-]+(zjednodušená forma, postačující pro většinu praktických případů; striktní RFC 5322 je velmi komplexní). - HTTP/HTTPS URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Francouzské telefonní číslo:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Francouzské PSČ:
\b\d{5}\b - ISO datum (YYYY-MM-DD):
\b\d{4}-\d{2}-\d{2}\b - IPv4 adresa:
\b(?:\d{1,3}\.){3}\d{1,3}\b - Celé slovo:
\bfoo\b(word boundaries zabraňují matchovánífootball). - Hashtag:
#\w+ - Semver číslo verze:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter / X identifikátor:
@\w{1,15}
Zachycené skupiny
Regex může obsahovat skupiny mezi závorkami, které izolují část matche pro znovupoužití.
Například vzor (\w+)@(\w+\.\w+) aplikovaný na alice@example.com zachycuje dvě
skupiny: alice a example.com. Nástroj tyto skupiny zobrazuje v dedikovaném
sloupci, vedle každého matche. Pojmenované skupiny ((?P<name>...)) jsou také
vypsány, indexované svým názvem.
Pro skupinu bez zachycení (užitečné pro aplikaci kvantifikátoru bez znečištění seznamu skupin)
používáme (?:...).
Ochrana proti ReDoS
PCRE engine PHP může vstoupit do catastrophic backtracking na některých patologických vzorech:
vzor jako (a+)+$ aplikovaný na dlouhý neukončený řetězec a může zablokovat
server na několik sekund. Pro vyhnutí se tomuto denial of service regulárním výrazem
(ReDoS) nástroj aplikuje dva limity:
set_time_limit(2)na straně workeru (zpracování se vzdá po 2 sekundách);- snížení
pcre.backtrack_limitna 100 000, což rychle selhává vzory, které explorují příliš mnoho kombinací.
V případě příliš nákladného vzoru nástroj zobrazí PCRE chybovou zprávu
(preg_last_error_msg()), typicky Backtrack limit was exhausted. Přeformulujte váš
vzor použitím possessive kvantifikátorů (a++) nebo atomických skupin
((?>...)) pro vyhnutí se backtrackingu.
Často kladené otázky
Proč můj regex nematchuje, když funguje v JavaScriptu?
Engine tohoto nástroje je PCRE (PHP), blízký Perlu. Syntaxe je velmi podobná JavaScriptu, ale několik funkcionalit se liší: lookbehindy proměnné délky, některé Unicode aliasy, nebo defaultní správa case sensitivity. Pokud chcete spustit vzor na straně prohlížeče, testujte také v JS prostředí.
Proč moje \w nezachycuje akcenty?
Bez flagu u \w rozpoznává pouze [A-Za-z0-9_]. S
u (Unicode) rozpoznává všechna písmena ve smyslu UCD, včetně akcentovaných znaků.
Pro pokročilejší použijte Unicode třídy: \p{L} (písmeno), \p{N}
(číslice), \p{P} (interpunkce).
Uchovává nástroj můj text?
Ne. Vzor a subjekt jsou zpracovány v RAM PHP workerem, bez persistence. Žádná odeslaná data nejsou logována.
Co dělat, pokud dostanu zprávu "Backtrack limit was exhausted"?
Váš vzor dělá příliš mnoho návratů. Hledejte nested kvantifikátory typu
(a+)+ nebo (\w+)*, které jsou typickými případy ReDoS. Nahraďte je
neambiguní formou: například \w+ místo (\w+)*.
Mohu testovat víceřádkový vzor?
Ano. Zaškrtněte volbu m, aby ^ a $ rozpoznávaly začátky
a konce každého řádku. Zaškrtněte navíc s, pokud chcete, aby . procházel
zalomeními řádků.
Ukázka požadavku
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}'
Vstupní schéma
| Pole | Typ | Povinné | Výchozí |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Koncové body
GET https://cdrn.fr/api/v1/tools- vypíše všechny dostupné nástrojeGET https://cdrn.fr/api/v1/tools/regex-tester- získá schéma tohoto nástrojePOST https://cdrn.fr/api/v1/tools/regex-tester/execute- spustí tento nástroj s JSON payloadem