Testi regulaaravaldist
- Töölaud
- Dokumentatsioon
- API
Milleks regulaaravaldiste testijat kasutatakse?
Regulaaravaldise tester võimaldab teil kontrollida regulaaravaldise mustri (regex) vastavust
oodatud tekstile, ilma et peaksite rakenduse koodi käivitama. Kleebime mustri, kleepime sisendteksti, me
kontrollige valikuid (lipud) ja tööriist kuvab kohe leitud vastete loendi
samuti tabatud rühmad. See on PHP-s preg_match_all() võrgus vaste
JavaScriptis String.matchAll() või Pythonis re.findall().
Regeksid on nii võimsad kui ka keerulised. Koma, valesti paigutatud sulud, kvantor ahn, kes imeb liiga palju märke: ja väljavõetud string pole enam see, mida ootasime. Tester väldib edasi-tagasi reisi redaktori, terminali ja testfailiga: me kordame mustrit, kuni näeme hea tulemus.
Kuidas mustrit kirjutada?
Sisestage regex ilma eraldajateta. Pole /.../ ega #...#.
Näiteks e-posti aadresside jäädvustamiseks tekstist lihtsalt sisestage
[\w.+-]+@[\w-]+\.[\w.-]+. Valikud (lipud) juhitakse märkeruutudega.
Valik u (Unicode) on vaikimisi märgitud. Seda soovitakse peaaegu alati: ilma selleta
\w ei tuvasta rõhumärke ja mõned mustrid tagastavad vaikse PCRE vea
UTF-8 stringid.
PCRE valikud
- i (tõstutundlik):
[a-z]tunneb ära ka suurtähed. - m (mitmerealine):
^ja$vastavad rea algusesse ja lõppu iga rida, pluss ainult üldise stringi algus ja lõpp. - s (dotall):
.tuvastab ka reavahetused. Kasulik mustrite jaoks mis peavad läbima lõigud. - u (unicode): tõlgendab UTF-8 mustrit ja teemat. Oluline kohe kui tekst sisaldab mitte-ASCII märke (rõhumärgid, emotikonid, ideogrammid).
Levinud regexi näited
- E-posti aadress:
[\w.+-]+@[\w-]+\.[\w.-]+(lihtsustatud vorm, piisav enamik praktilisi juhtumeid; range RFC 5322 on väga keeruline). - HTTP/HTTPS URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Prantsuse telefoninumber:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Prantsuse sihtnumber:
\d{5} - ISO kuupäev (AAAA-KK-PP):
\d{4}-\d{2}-\d{2} - IPv4-aadress:
(?:\d{1,3}\.){3}\d{1,3} - Terve sõna:
foo(sõnapiirid väldivad sobitamistjalgpall). - Räsimärk:
#\w+ - Semantiline versiooninumber:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitteri ID / X:
@\w{1,15}
Püütud rühmad
Regex võib sisaldada sulgudes rühmi, mis eraldavad osa vastest korduskasutamiseks.
Näiteks muster (\w+)@(\w+\.\w+), mis on rakendatud aadressile alice@example.com, hõivab kaks
rühmad: alice ja example.com. Tööriist kuvab need rühmad veerus
pühendatud, iga matši kõrval. Nimega rühmad ((?P) on samuti olemas
loetletud, nime järgi indekseeritud.
Rühmitamiseks ilma hõivamiseta (kasulik kvantori rakendamiseks ilma rühmade loendit saastamata)
kasutab (?:...).
Kaitse ReDoS-i eest
PHP PCRE-mootor võib teatud patoloogilistel põhjustel põhjustada katastroofilist tagasilööki.
muster nagu (a+)+$, mida rakendatakse pikale lõpetamata stringile a, võib blokeerida
serverisse mõneks sekundiks. Selle vältimiseks regulaaravaldise teenuse keelamine
(ReDoS), rakendab tööriist kahte piirangut:
- töötaja poolel
set_time_limit(2)(töötlemine katkeb 2 sekundi pärast); pcre.backtrack_limitvähendamine 100 000-ni, mis põhjustab mustrite kiiret ebaõnnestumist kes uurivad liiga palju kombinatsioone.
Liiga kalli põhjuse korral kuvab tööriist PCRE veateate
(preg_last_error_msg()), tavaliselt Tagasiraja limiit on ammendatud. Sõnastage oma
muster, kasutades omastavaid kvantoreid (a++) või aatomirühmi
((?>...)), et vältida tagasiliikumist.
Korduma kippuvad küsimused
Miks minu regex ei ühti, kuigi see töötab JavaScriptis?
Selle tööriista mootor on Perlile lähedane PCRE (PHP). Süntaks on väga sarnane JavaScriptile, kuid mõned funktsioonid erinevad: muutuva pikkusega tagavaatenurk, teatud varjunimed Unicode ehk tõstutundlikkuse vaiketöötlus. Kui plaanite käivitada mustri pool brauserit, testige ka JS-keskkonnas.
Miks mu \w ei võta rõhumärke?
Ilma lipu uta tuvastab \w ainult [A-Za-z0-9_]. Koos
u (Unicode) tunneb ära kõik tähed UCD tähenduses, sealhulgas rõhumärgid.
Edasiliikumiseks kasutage Unicode'i klasse: \p{L} (täht), \p{N}
(number), \p{P} (kirjavahemärgid).
Kas tööriist säilitab minu teksti?
Ei. PHP töötaja töötleb mustrit ja teemat RAM-is ilma püsivuseta. Andmed puuduvad esitatud ei logita.
Mida peaksin tegema, kui saan teate "Tagasiraja limiit on ammendatud"?
Teie muster liigub liiga palju edasi-tagasi. Otsige seda tüüpi pesastatud kvantoreid
(a+)+ või (\w+)*, mis on tüüpilised ReDoS-i juhtumid. Asendage need ühega
üheselt mõistetav vorm: näiteks \w+ asemel (\w+)*.
Kas ma saan testida mitmerealist mustrit?
Jah. Märkige suvand m, et ^ ja $ tunneksid ära alguse
ja iga rea otsad. Täiendavalt märkige s, kui soovite ., et ületada
reavahed.
Päringunäide
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}'
Sisendskeem
| Väli | Tüüp | Kohustuslik | Vaikimisi |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Lõpp-punktid
GET https://cdrn.fr/api/v1/tools- loetleb kõik saadaolevad tööriistadGET https://cdrn.fr/api/v1/tools/regex-tester- toob selle tööriista skeemiPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- täidab selle tööriista JSON-payloadiga