Reguláris kifejezés tesztelése
- Irányítópult
- Dokumentáció
- API
Mire használható a reguláris kifejezés tesztelő?
A regex teszter lehetővé teszi annak ellenőrzését, hogy egy reguláris kifejezés-minta (regex) egyezik-e
a várt szövegre, anélkül, hogy elindítaná az alkalmazás kódját. Beillesztjük a mintát, beillesztjük a beviteli szöveget, mi
ellenőrizze a beállításokat (jelzők), és az eszköz azonnal megjeleníti a talált egyezések listáját
valamint az elfogott csoportokat. Ez a preg_match_all() online megfelelője PHP-ben, innen
String.matchAll() JavaScriptben vagy re.findall() Pythonban.
A regexek egyszerre erősek és trükkösek. Egy vessző, egy rosszul elhelyezett zárójel, egy kvantor falánk, aki túl sok karaktert szív be: és a kivont karakterlánc már nem az, amit vártunk. A tesztelő elkerüli az oda-vissza utat szerkesztővel, terminállal és tesztfájllal: addig iteráljuk a mintát, amíg meg nem látjuk a jó eredmény.
Hogyan kell írni a mintát?
Írja be a reguláris kifejezést határolók nélkül. Nincs /.../, nincs #...#.
Például e-mail címek szövegből való rögzítéséhez csak írja be
[\w.+-]+@[\w-]+\.[\w.-]+. Az opciókat (jelzők) jelölőnégyzetek szabályozzák.
Az u (Unicode) opció alapértelmezés szerint be van jelölve. Szinte mindig kívánatos: anélkül,
A \w nem ismeri fel az ékezeteket, és egyes minták csendes PCRE hibát adnak vissza
UTF-8 karakterláncok.
PCRE opciók
- i (nem érzékeny a kis- és nagybetűkre):
[a-z]a nagybetűket is felismeri. - m (többsoros):
^és$megegyezik a következő kezdetével és végével minden soron, valamint csak a teljes karakterlánc eleje és vége. - s (pont):
.a sortöréseket is felismeri. Hasznos mintákhoz amelynek át kell haladnia a bekezdéseken. - u (unicode): értelmezi a mintát és a tárgyat UTF-8-ban. Lényeges, amint a szöveg nem ASCII karaktereket (ékezeteket, hangulatjeleket, ideogrammokat) tartalmaz.
Gyakori reguláris példák
- E-mail cím:
[\w.+-]+@[\w-]+\.[\w.-]+(egyszerűsített forma, elegendő a legtöbb gyakorlati eset; szigorú RFC 5322 nagyon összetett). - HTTP/HTTPS URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Francia telefonszám:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Francia irányítószám:
\d{5} - ISO-dátum (ÉÉÉÉ-HH-NN):
\d{4}-\d{2}-\d{2} - IPv4-cím:
(?:\d{1,3}\.){3}\d{1,3} - Egész szó:
foo(a szóhatárok elkerüli az egyezéstfutball). - Hashtag:
#\w+ - Szemantikai verziószám:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter ID / X:
@\w{1,15}
Elfogott csoportok
A reguláris kifejezések zárójelben tartalmazhatnak csoportokat, amelyek az egyezés egy részét izolálják újrafelhasználás céljából.
Például az alice@example.com címre alkalmazott (\w+)@(\w+\.\w+) minta kettőt rögzít
csoportok: alice és example.com. Az eszköz ezeket a csoportokat egy oszlopban jeleníti meg
dedikált, minden meccs mellett. Az elnevezett csoportok ((?P) is
felsorolva, név szerint indexelve.
Rögzítés nélküli csoportosításhoz (hasznos kvantor alkalmazásához a csoportok listájának szennyezése nélkül)
a (?:...) kódot használja.
ReDoS elleni védelem
A PHP PCRE motorja bizonyos kóros okok miatt katasztrofális visszalépésbe léphet be:
egy hosszú, végtelen a karakterláncra alkalmazott (a+)+$ minta blokkolhatja
néhány másodpercig a szerveren. Ennek elkerülése érdekében reguláris kifejezés szolgáltatásmegtagadás
(ReDoS), az eszköz két korlátot alkalmaz:
- egy
set_time_limit(2)a dolgozói oldalon (a feldolgozás 2 másodperc után megszakad); - a
pcre.backtrack_limit100 000-re csökkentése, ami a minták gyors meghibásodását okozza akik túl sok kombinációt fedeznek fel.
Túl drága ok esetén az eszköz a PCRE hibaüzenetet jeleníti meg
(preg_last_error_msg()), jellemzően A visszalépési korlát kimerült. Fogalmazd át a sajátodat
minta birtokos kvantorok (a++) vagy atomcsoportok használatával
((?>...)), hogy elkerülje a visszalépést.
Gyakran ismételt kérdések
Miért nem egyezik a regexem, pedig JavaScriptben működik?
Ennek az eszköznek a motorja a PCRE (PHP), közel a Perlhez. A szintaxis nagyon hasonló a JavaScripthez, de egyes jellemzők eltérnek: változó hosszúságú mögöttük, bizonyos álnevek Unicode, vagy a kis- és nagybetűk érzékenységének alapértelmezett kezelése. Ha a mintaoldalt tervezi futtatni böngésző, tesztelje JS környezetben is.
Miért nem rögzíti a \w ékezeteket?
Az u jelző nélkül a \w csak a [A-Za-z0-9_] elemet ismeri fel. -val
u (Unicode), felismeri az UCD értelemben vett összes betűt, beleértve az ékezetes karaktereket is.
A továbblépéshez használjon Unicode osztályokat: \p{L} (betű), \p{N}
(szám), \p{P} (központozási jelek).
Megőrzi az eszköz a szövegemet?
Nem. A mintát és a tárgyat a RAM-ban dolgozza fel a PHP-munkás, kitartás nélkül. Nincs adat elküldve nincs naplózva.
Mit tegyek, ha „A visszalépési korlát kimerült” üzenetet kapok?
A mintád túlságosan össze-vissza jár. Keresse a típushoz tartozó beágyazott kvantorokat
(a+)+ vagy (\w+)*, amelyek a ReDoS tipikus esetei. Cserélje ki őket eggyel
egyértelmű forma: például \w+ a (\w+)* helyett.
Tesztelhetek többsoros mintát?
Igen. Jelölje be az m opciót, hogy a ^ és a $ felismerje a kezdeteket
és minden sor vége. Ezenkívül jelölje be a s-t, ha azt szeretné, hogy a . átlépje a
sortörések.
Kérés példa
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}'
Bemeneti séma
| Mező | Típus | Kötelező | Alapértelmezett |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Végpontok
GET https://cdrn.fr/api/v1/tools- listázza az összes elérhető eszköztGET https://cdrn.fr/api/v1/tools/regex-tester- lekéri ezen eszköz sémájátPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- végrehajtja ezen eszközt JSON payloaddal