Testēt regulāro izteiksmi
- Vadības panelis
- Dokumentācija
- API
Kam tiek izmantots regulārās izteiksmes pārbaudītājs?
Izmantojot regulāro izteiksmju testeri, varat pārbaudīt, vai regulārās izteiksmes modelis (regulārā izteiksme) atbilst
uz paredzēto tekstu, nepalaižot lietojumprogrammas kodu. Mēs ielīmējam modeli, mēs ielīmējam ievades tekstu, mēs
pārbaudiet opcijas (karodziņus), un rīks nekavējoties parāda atrasto atbilstību sarakstu
kā arī notvertās grupas. Šis ir tiešsaistes ekvivalents vārdam preg_match_all() PHP, no
String.matchAll() programmā JavaScript vai re.findall() programmā Python.
Regexes ir gan spēcīgas, gan sarežģītas. Komats, nevietā ievietotas iekavas, kvantētājs rijējs, kurš iesūc pārāk daudz rakstzīmju: un izvilktā virkne vairs nav tāda, kādu mēs gaidījām. Testeris izvairās no ceļojuma turp un atpakaļ, izmantojot redaktoru, termināli un testa failu: mēs atkārtojam modeli, līdz redzam labs rezultāts.
Kā uzrakstīt modeli?
Ievadiet regulāro izteiksmi bez atdalītājiem. Nav /.../, nav #...#.
Piemēram, lai tvertu e-pasta adreses no teksta, vienkārši ievadiet
[\w.+-]+@[\w-]+\.[\w.-]+. Opcijas (karodziņus) kontrolē izvēles rūtiņas.
Opcija u (Unicode) ir atzīmēta pēc noklusējuma. Tas ir gandrīz vienmēr vēlams: bez tā,
\w neatpazīst akcentus, un daži modeļi atgriež kluso PCRE kļūdu
UTF-8 virknes.
PCRE iespējas
- i (reģistrjutīgs):
[a-z]atpazīst arī lielos burtus. - m (daudzrindu):
^un$atbilst sākumiem un beigām katra rindiņa, kā arī tikai kopējās virknes sākums un beigas. - s (dotall):
.atpazīst arī rindiņu pārtraukumus. Noderīgi modeļiem kam jāšķērso rindkopas. - u (unikods): interpretē modeli un priekšmetu UTF-8. Būtiski, tiklīdz teksts satur rakstzīmes, kas nav ASCII rakstzīmes (akcenti, emocijzīmes, ideogrammas).
Izplatīti regex piemēri
- E-pasta adrese:
[\w.+-]+@[\w-]+\.[\w.-]+(vienkāršota forma, pietiekama vairums praktisko gadījumu; stingrais RFC 5322 ir ļoti sarežģīts). - HTTP/HTTPS URL:
https?://[\w.-]+(?:/[\w./?%&=-]*)? - Francijas tālruņa numurs:
(?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4} - Francijas pasta indekss:
\d{5} - ISO datums (GGGG-MM-DD):
\d{4}-\d{2}-\d{2} - IPv4 adrese:
(?:\d{1,3}\.){3}\d{1,3} - Viss vārds:
foo(vārdu robežas izvairās no atbilstībasfutbols). - Hashtag:
#\w+ - Semantiskās versijas numurs:
\d+\.\d+\.\d+(?:-[\w.-]+)? - Twitter ID/X:
@\w{1,15}
Noķertas grupas
Regulārajā izteiksmē iekavās var būt iekļautas grupas, kas izolē atbilstības daļu atkārtotai izmantošanai.
Piemēram, modelis (\w+)@(\w+\.\w+), kas tiek lietots vietnei alice@example.com, tver divus
grupas: alise un example.com. Rīks parāda šīs grupas kolonnā
veltīts, blakus katram mačam. Ir arī nosauktas grupas ((?P).
uzskaitīti, indeksēti pēc nosaukuma.
Lai grupētu bez tveršanas (noderīgi, lai lietotu kvantatoru, nepiesārņojot grupu sarakstu), mēs
izmanto (?:...).
Aizsardzība pret ReDoS
PHP PCRE dzinējs var izraisīt katastrofālu atkāpšanos noteiktu patoloģisku iemeslu dēļ:
paraugs, piemēram, (a+)+$, kas tiek lietots garai nepabeigtai virknei a, var bloķēt
serverī vairākas sekundes. Lai izvairītos no šīs regulārās izteiksmes pakalpojuma atteikums
(ReDoS), rīks piemēro divus ierobežojumus:
set_time_limit(2)darbinieka pusē (apstrāde tiek pārtraukta pēc 2 sekundēm);- samazinot
pcre.backtrack_limitlīdz 100 000, izraisot modeļu ātru neveiksmi kuri izpēta pārāk daudz kombināciju.
Pārāk dārga iemesla gadījumā rīks parāda PCRE kļūdas ziņojumu
(preg_last_error_msg()), parasti Backtrack ierobežojums ir izsmelts. Pārfrāzējiet savu
modelis, izmantojot īpašumtiesības kvantorus (a++) vai atomu grupas
((?>...)), lai izvairītos no atkāpšanās.
Bieži uzdotie jautājumi
Kāpēc mans regex neatbilst, lai gan tas darbojas JavaScript?
Šī rīka dzinējs ir PCRE (PHP), kas ir tuvu Perl. Sintakse ir ļoti līdzīga JavaScript, bet dažas funkcijas atšķiras: mainīga garuma izskats, noteikti aizstājvārdi Unicode jeb noklusējuma reģistrjutīguma apstrāde. Ja plānojat palaist raksta pusi pārlūkprogrammu, pārbaudiet arī JS vidē.
Kāpēc mans \w neuztver akcentus?
Bez karoga u \w atpazīst tikai [A-Za-z0-9_]. Ar
u (Unicode), tas atpazīst visus burtus UCD nozīmē, ieskaitot diakritiskās rakstzīmes.
Lai iet tālāk, izmantojiet Unicode klases: \p{L} (burts), \p{N}
(skaitlis), \p{P} (pieturzīmes).
Vai rīks saglabā manu tekstu?
Nē. PHP darbinieks bez neatlaidības apstrādā modeli un tēmu RAM. Nav datu iesniegtais nav reģistrēts.
Kas man jādara, ja saņemu ziņojumu "Atkāpšanās ierobežojums ir izsmelts"?
Jūsu modelis pārāk daudz iet uz priekšu un atpakaļ. Meklējiet šāda veida ligzdotos kvantorus
(a+)+ vai (\w+)*, kas ir tipiski ReDoS gadījumi. Nomainiet tos ar vienu
nepārprotama forma: piemēram, \w+, nevis (\w+)*.
Vai varu pārbaudīt vairākrindu rakstu?
Jā. Atzīmējiet opciju m, lai ^ un $ atpazītu sākumu
un katras rindas galiem. Papildus atzīmējiet s, ja vēlaties ., lai šķērsotu
līniju pārtraukumi.
Pieprasījuma piemērs
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}'
Ievades shēma
| Lauks | Tips | Obligāts | Noklusējums |
|---|---|---|---|
pattern |
string | ✓ | – |
subject |
text | ✓ | – |
flag_i |
boolean | ✓ | false |
flag_m |
boolean | ✓ | false |
flag_s |
boolean | ✓ | false |
flag_u |
boolean | ✓ | true |
Endpoint
GET https://cdrn.fr/api/v1/tools- uzskaita visus pieejamos rīkusGET https://cdrn.fr/api/v1/tools/regex-tester- iegūst šī rīka shēmuPOST https://cdrn.fr/api/v1/tools/regex-tester/execute- izpilda šo rīku ar JSON payload