Testirati regularni izraz
- Nadzorna ploča
- Dokumentacija
- API
Za što se koristi tester regularnih izraza?
Tester regularnih izraza omogućuje vam da provjerite podudara li se uzorak regularnog izraza (regex).
na očekivani tekst, bez potrebe za pokretanjem koda aplikacije. Zalijepimo uzorak, zalijepimo ulazni tekst, mi
provjerite opcije (zastavice), a alat odmah prikazuje popis pronađenih podudaranja
kao i zarobljene grupe. Ovo je online ekvivalent preg_match_all() u PHP-u, od
String.matchAll() u JavaScriptu ili re.findall() u Pythonu.
Regularni izrazi su moćni i lukavi. Zarez, pogrešno postavljena zagrada, kvantifikator proždrljivac koji usisava previše znakova: i izvučeni niz više nije ono što smo očekivali. Ispitivač izbjegava kružno putovanje s uređivačem, terminalom i testnom datotekom: ponavljamo uzorak dok ne vidimo dobar rezultat.
Kako napisati uzorak?
Unesite regularni izraz bez graničnika. Nema /.../, nema #...#.
Na primjer, za snimanje adresa e-pošte iz teksta, samo unesite
[\w.+-]+@[\w-]+\.[\w.-]+. Opcije (zastavice) kontroliraju se potvrdnim okvirima.
Opcija u (Unicode) označena je prema zadanim postavkama. Gotovo uvijek je željeno: bez njega,
\w ne prepoznaje naglaske, a neki uzorci vraćaju tihu PCRE pogrešku na
UTF-8 nizovi.
PCRE opcije
- i (neosjetljivo na velika i mala slova):
[a-z]također prepoznaje velika slova. - m (višeredni):
^i$odgovaraju počecima i krajevima svaki redak, plus samo početak i kraj ukupnog niza. - s (dotall):
.također prepoznaje prijelome redaka. Korisno za uzorke koji mora prelaziti odlomke. - u (unicode): tumači uzorak i predmet u UTF-8. Bitno čim tekst sadrži znakove koji nisu ASCII (naglasci, emoji, ideogrami).
Uobičajeni primjeri regularnih izraza
- Adresa e-pošte:
[\w.+-]+@[\w-]+\.[\w.-]+(pojednostavljeni oblik, dovoljan za većina praktičnih slučajeva; strogi RFC 5322 je vrlo složen). - HTTP/HTTPS URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Francuski telefonski broj:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Francuski poštanski broj:
\d{5} - ISO datum (GGGG-MM-DD):
\d{4}-\d{2}-\d{2} - IPv4 adresa:
(?:\d{1,3}\.){3}\d{1,3} - Cijela riječ:
foo(granice riječi izbjegavaju podudaranjenogomet). - Hashtag:
#\w+ - Broj semantičke verzije:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter ID / X:
@\w{1,15}
Zarobljene grupe
Regularni izraz može sadržavati grupe u zagradama koje izoliraju dio podudaranja za ponovnu upotrebu.
Na primjer, uzorak (\w+)@(\w+\.\w+) primijenjen na alice@example.com obuhvaća dva
grupe: alice i example.com. Alat prikazuje te grupe u stupcu
posvećeno, uz svaku utakmicu. Imenovane grupe ((?P) su također
navedeni, indeksirani po imenu.
Za grupiranje bez hvatanja (korisno za primjenu kvantifikatora bez zagađivanja popisa grupa), mi
koristi (?:...).
Zaštita od ReDoS-a
PHP-ov PCRE mehanizam može ući u katastrofalno praćenje unatrag zbog određenih patoloških razloga:
uzorak poput (a+)+$ primijenjen na dugi nezavršeni niz a može blokirati
poslužitelj nekoliko sekundi. Da biste izbjegli ovaj uobičajeni izraz uskraćivanja usluge
(ReDoS), alat primjenjuje dva ograničenja:
set_time_limit(2)na radnoj strani (obrada se prekida nakon 2 sekunde);- smanjenje
pcre.backtrack_limitna 100.000, što uzrokuje brzi kvar uzoraka koji istražuju previše kombinacija.
U slučaju preskupog razloga, alat prikazuje PCRE poruku o pogrešci
(preg_last_error_msg()), obično je ograničenje povratnog praćenja potrošeno. Preformulirajte svoje
uzorak koji koristi posesivne kvantifikatore (a++) ili atomske skupine
((?>...)) kako biste izbjegli vraćanje unatrag.
Često postavljana pitanja
Zašto moj regularni izraz ne odgovara iako radi u JavaScriptu?
Motor ovog alata je PCRE (PHP), blizak Perlu. Sintaksa je vrlo slična JavaScriptu, ali neke značajke se razlikuju: lookbehinds promjenjive duljine, određeni aliasi Unicode ili zadano rukovanje razlikovanjem velikih i malih slova. Ako planirate izvoditi stranu uzorka preglednik, također testirajte u JS okruženju.
Zašto moj \w ne bilježi naglaske?
Bez oznake u, \w prepoznaje samo [A-Za-z0-9_]. sa
u (Unicode), prepoznaje sva slova u UCD smislu, uključujući znakove s naglascima.
Da biste išli dalje, koristite Unicode klase: \p{L} (slovo), \p{N}
(broj), \p{P} (interpunkcija).
Čuva li alat moj tekst?
Ne. Uzorak i subjekt obrađuju u RAM-u PHP radnik, bez upornosti. Nema podataka poslano nije zapisano.
Što trebam učiniti ako primim poruku "Backtrack limit was exhausted"?
Vaš obrazac previše ide naprijed-natrag. Potražite ugniježđene kvantifikatore tipa
(a+)+ ili (\w+)*, što su tipični slučajevi ReDoS-a. Zamijenite ih jednim
nedvosmislen oblik: na primjer \w+ umjesto (\w+)*.
Mogu li testirati višeredni uzorak?
da Provjerite opciju m kako bi ^ i $ prepoznali početke
i krajeve svake linije. Dodatno označite s ako želite da . prijeđe
prijelomi redaka.
Primjer zahtjeva
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}'
Ulazna shema
| Polje | Tip | Obavezno | Zadano |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Krajnje točke
GET https://cdrn.fr/api/v1/tools- ispisuje sve dostupne alateGET https://cdrn.fr/api/v1/tools/regex-tester- dohvaća shemu ovog alataPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- izvršava ovaj alat s JSON payloadom