Testovať regulárny výraz
- Dashboard
- Dokumentácia
- API
Na čo slúži regex tester?
Regex tester umožňuje overiť, že vzor regulárneho výrazu (regex) skutočne zodpovedá
očakávanému textu, bez nutnosti spúšťať aplikačný kód. Vložíme vzor, vložíme vstupný text, zaškrtneme
voľby (flags) a nástroj okamžite zobrazí zoznam nájdených zhôd
ako aj zachytené skupiny. Je to online ekvivalent preg_match_all() v PHP,
String.matchAll() v JavaScripte alebo re.findall() v Pythone.
Regex sú súčasne mocné aj zradné. Čiarka, zle umiestnená zátvorka, hladný kvantifikátor, ktorý nasaje príliš znakov: a extrahovaný reťazec už nie je ten, ktorý sa očakával. Tester sa vyhýba tam-späť s editorom, terminálom a testovacím súborom: iterujeme vzor, kým nevidíme správny výsledok.
Ako napísať vzor?
Zadajte regex bez delimiterov. Žiadne /.../, žiadne #...#.
Napríklad na zachytenie emailových adries v texte zadajte iba
[\w.+-]+@[\w-]+\.[\w.-]+. Voľby (flags) sú kontrolované zaškrtávacími poľami.
Voľba u (Unicode) je defaultne zaškrtnutá. Takmer vždy je žiadúca: bez nej
\w nerozpoznáva akcenty a niektoré vzory vracajú tichú PCRE chybu na
UTF-8 reťazcoch.
PCRE voľby
- i (case-insensitive):
[a-z]rozpoznáva aj veľké písmená. - m (multiline):
^a$matchujú začiatky a konce každého riadku, nielen začiatok a koniec globálneho reťazca. - s (dotall):
.rozpoznáva aj konce riadkov. Užitočné pre vzory, ktoré musia prechádzať odsekmi. - u (unicode): interpretuje vzor a subjekt v UTF-8. Nepostrádateľné, akonáhle text obsahuje ne-ASCII znaky (akcenty, emoji, ideogramy).
Príklady bežných regex
- Emailová adresa:
[\w.+-]+@[\w-]+\.[\w.-]+(zjednodušená forma, postačujúca pre väčšinu praktických prípadov; striktná RFC 5322 je veľmi komplexná). - HTTP/HTTPS URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Francúzske telefónne číslo:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Francúzske PSČ:
\b\d{5}\b - ISO dátum (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ú matchovaniufootball). - Hashtag:
#\w+ - Semver číslo verzie:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter / X identifikátor:
@\w{1,15}
Zachytené skupiny
Regex môže obsahovať skupiny medzi zátvorkami, ktoré izolujú časť matchu na znovupoužitie.
Napríklad vzor (\w+)@(\w+\.\w+) aplikovaný na alice@example.com zachytáva dve
skupiny: alice a example.com. Nástroj tieto skupiny zobrazuje v dedikovanom
stĺpci, vedľa každého matchu. Pomenované skupiny ((?P<name>...)) sú tiež
vypísané, indexované svojím názvom.
Pre skupinu bez zachytenia (užitočné na aplikáciu kvantifikátora bez znečistenia zoznamu skupín)
používame (?:...).
Ochrana proti ReDoS
PCRE engine PHP môže vstúpiť do catastrophic backtracking na niektorých patologických vzoroch:
vzor ako (a+)+$ aplikovaný na dlhý neukončený reťazec a môže zablokovať
server na niekoľko sekúnd. Aby sa zabránilo tomuto denial of service regulárnym výrazom
(ReDoS), nástroj aplikuje dva limity:
set_time_limit(2)na strane workera (spracovanie sa vzdá po 2 sekundách);- zníženie
pcre.backtrack_limitna 100 000, čo rýchlo zlyháva vzory, ktoré exploruje príliš veľa kombinácií.
V prípade príliš nákladného vzoru nástroj zobrazí PCRE chybovú správu
(preg_last_error_msg()), typicky Backtrack limit was exhausted. Preformulujte váš
vzor použitím possessive kvantifikátorov (a++) alebo atomických skupín
((?>...)) na vyhýbanie sa backtrackingu.
Často kladené otázky
Prečo môj regex nematchuje, keď funguje v JavaScripte?
Engine tohto nástroja je PCRE (PHP), blízky Perlu. Syntax je veľmi podobná JavaScriptu, ale niekoľko funkcionalít sa líši: lookbehindy premenlivej dĺžky, niektoré Unicode aliasy, alebo defaultná správa case sensitivity. Ak chcete spustiť vzor na strane prehliadača, testujte aj v JS prostredí.
Prečo moje \w nezachytáva akcenty?
Bez flagu u \w rozpoznáva iba [A-Za-z0-9_]. S
u (Unicode) rozpoznáva všetky písmená v zmysle UCD, vrátane akcentovaných znakov.
Pre pokročilejšie použite Unicode triedy: \p{L} (písmeno), \p{N}
(číslica), \p{P} (interpunkcia).
Uchováva nástroj môj text?
Nie. Vzor a subjekt sú spracované v RAM PHP workerom, bez persistencie. Žiadne odoslané dáta nie sú logované.
Čo robiť, ak dostanem správu "Backtrack limit was exhausted"?
Váš vzor robí príliš veľa návratov. Hľadajte nested kvantifikátory typu
(a+)+ alebo (\w+)*, ktoré sú typickými prípadmi ReDoS. Nahraďte ich
neambiguknou formou: napríklad \w+ namiesto (\w+)*.
Môžem testovať viacriadkový vzor?
Áno. Zaškrtnite voľbu m, aby ^ a $ rozpoznávali začiatky
a konce každého riadku. Zaškrtnite navyše s, ak chcete, aby . prechádzal
zlomami riadkov.
Ukážka požiadavky
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é | Predvolené |
|---|---|---|---|
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šetky dostupné nástrojeGET https://cdrn.fr/api/v1/tools/regex-tester- získa schému tohto nástrojaPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- spustí tento nástroj s JSON payloadom