Testirati regularni izraz
- Nadzorna plošča
- Dokumentacija
- API
Za kaj se uporablja tester regularnih izrazov?
Preizkuševalec regularnih izrazov vam omogoča, da preverite, ali se vzorec regularnega izraza (regex) ujema
na pričakovano besedilo, ne da bi morali zagnati kodo aplikacije. Prilepimo vzorec, prilepimo vneseno besedilo, mi
preverite možnosti (zastavice) in orodje takoj prikaže seznam najdenih ujemanj
kot tudi ujete skupine. To je spletni ekvivalent preg_match_all() v PHP, od
String.matchAll() v JavaScriptu ali re.findall() v Pythonu.
Redni izrazi so močni in zapleteni. Vejica, napačno postavljen oklepaj, kvantifikator požrešnik, ki posrka preveč znakov: in izluščeni niz ni več to, kar smo pričakovali. Tester se izogne povratnemu potovanju z urejevalnikom, terminalom in testno datoteko: vzorec ponavljamo, dokler ne vidimo dober rezultat.
Kako napisati vzorec?
Vnesite regularni izraz brez ločil. Brez /.../, brez #...#.
Na primer, če želite zajeti e-poštne naslove iz besedila, preprosto vnesite
[\w.+-]+@[\w-]+\.[\w.-]+. Možnosti (zastavice) nadzirate s potrditvenimi polji.
Možnost u (Unicode) je privzeto označena. Je skoraj vedno zaželeno: brez njega,
\w ne prepozna naglasov in nekateri vzorci vrnejo tiho napako PCRE na
Nizi UTF-8.
PCRE možnosti
- i (neobčutljivo za velike črke):
[a–z]prepozna tudi velike črke. - m (večvrstično):
^in$se ujemata z začetkom in koncem vsaka vrstica ter samo začetek in konec celotnega niza. - s (dotall):
.prepozna tudi prelome vrstic. Uporabno za vzorce ki mora prečkati odstavke. - u (unicode): interpretira vzorec in predmet v UTF-8. Bistveno takoj, ko besedilo vsebuje znake, ki niso ASCII (naglasi, emoji, ideogrami).
Pogosti primeri regularnih izrazov
- E-poštni naslov:
[\w.+-]+@[\w-]+\.[\w.-]+(poenostavljena oblika, zadostuje za najbolj praktični primeri; strogi RFC 5322 je zelo zapleten). - URL HTTP/HTTPS:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Francoska telefonska številka:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Francoska poštna številka:
\d{5} - Datum ISO (LLLL-MM-DD):
\d{4}-\d{2}-\d{2} - Naslov IPv4:
(?:\d{1,3}\.){3}\d{1,3} - Celotna beseda:
foo(meje besed se izogibajo ujemanjunogomet). - Hashtag:
#\w+ - Semantična številka različice:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter ID / X:
@\w{1,15}
Zajete skupine
Regularni izraz lahko vsebuje skupine v oklepajih, ki izolirajo del ujemanja za ponovno uporabo.
Na primer, vzorec (\w+)@(\w+\.\w+), uporabljen za alice@example.com, zajema dva
skupine: alice in example.com. Orodje te skupine prikaže v stolpcu
namensko, ob vsaki tekmi. Poimenovane skupine ((?P) so tudi
naveden, indeksiran po imenu.
Za združevanje brez zajema (uporabno za uporabo kvantifikatorja brez onesnaženja seznama skupin)
uporablja (?:...).
Zaščita pred ReDoS
PHP-jev motor PCRE lahko vstopi v katastrofalno povratno sledenje zaradi določenih patoloških razlogov:
vzorec, kot je (a+)+$, uporabljen za dolg neprekinjen niz a, lahko blokira
strežnik za nekaj sekund. Da bi se izognili tej zavrnitvi storitve regularnega izraza
(ReDoS), orodje uporablja dve omejitvi:
- a
set_time_limit(2)na delavski strani (obdelava se prekine po 2 sekundah); - zmanjšanje
pcre.backtrack_limitna 100.000, zaradi česar vzorci hitro odpovejo ki raziskujejo preveč kombinacij.
V primeru predragega razloga orodje prikaže sporočilo o napaki PCRE
(preg_last_error_msg()), običajno omejitev povratnega sledenja je bila izčrpana. Preoblikujte svoje
vzorec z uporabo posesivnih kvantifikatorjev (a++) ali atomskih skupin
((?>...)), da se izognete vračanju nazaj.
Pogosta vprašanja
Zakaj se moj regularni izraz ne ujema, čeprav deluje v JavaScriptu?
Motor tega orodja je PCRE (PHP), blizu Perlu. Sintaksa je zelo podobna JavaScriptu, vendar nekatere funkcije se razlikujejo: lookbehinds spremenljive dolžine, določeni vzdevki Unicode ali privzeto ravnanje z razlikovanjem med velikimi in malimi črkami. Če nameravate zagnati stran vzorca brskalnik, preizkusite tudi v okolju JS.
Zakaj moj \w ne zajame naglasov?
Brez zastavice u \w prepozna samo [A-Za-z0-9_]. z
u (Unicode), prepozna vse črke v smislu UCD, vključno z naglašenimi znaki.
Če želite iti dlje, uporabite razrede Unicode: \p{L} (črka), \p{N}
(številka), \p{P} (ločila).
Ali orodje ohrani moje besedilo?
Ne. Vzorec in zadevo v RAM-u obdela PHP delavec brez vztrajnosti. Ni podatkov poslano ni zabeleženo.
Kaj naj storim, če prejmem sporočilo »Omejitev povratnega sledenja je bila izčrpana«?
Vaš vzorec gre preveč naprej in nazaj. Poiščite ugnezdene kvantifikatorje vrste
(a+)+ ali (\w+)*, kar sta tipična primera ReDoS. Zamenjajte jih z enim
nedvoumna oblika: na primer \w+ namesto (\w+)*.
Ali lahko preizkusim večvrstični vzorec?
ja Preverite možnost m, da ^ in $ prepoznata začetke
in konca vsake vrstice. Dodatno označite s, če želite, da . prečka
prelomi vrstic.
Primer zahteve
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}'
Vhodna shema
| Polje | Tip | Obvezno | Privzeto |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Končne točke
GET https://cdrn.fr/api/v1/tools- izpiše vsa razpoložljiva orodjaGET https://cdrn.fr/api/v1/tools/regex-tester- pridobi shemo tega orodjaPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- izvede to orodje s JSON payloadom