Ittestja espressjoni regolari

jittestja espressjoni regolari (regex) fuq test u juri l-matches u l-gruppi maqbuda

Għal xiex jintuża tester tal-espressjoni regolari?

Aregex tester jippermettilek li tiċċekkja li mudell ta' espressjoni regolari (regex) jaqbel għat-test mistenni, mingħajr ma jkollok tniedi l-kodiċi tal-applikazzjoni. Aħna paste l-mudell, aħna paste-test input, aħna iċċekkja l-għażliet (bnadar), u l-għodda immedjatament turi l-lista ta 'logħbiet misjuba kif ukoll il-gruppi maqbuda. Dan huwa l-ekwivalenti onlajn ta' preg_match_all() fil-PHP, minn String.matchAll() f'JavaScript jew re.findall() f'Python.

Regexes huma kemm qawwija kif ukoll delikati. Virgola, parentesi żbaljata, kwantifikatur glutton li jiġbed wisq karattri: u l-istring estratt m'għadux dak li stennejna. It-tester jevita l-vjaġġ bir-ritorn b'editur, terminal u fajl tat-test: aħna ntennu l-mudell sakemm naraw il- riżultat tajjeb.

Kif tikteb il-mudell?

Daħħal ir-reġexmingħajr delimitaturi. L-ebda /.../, l-ebda #...#. Pereżempju, biex taqbad indirizzi tal-email mit-test, daħħal biss [\w.+-]+@[\w-]+\.[\w.-]+. Għażliet (bnadar) huma kkontrollati minn kaxxi ta 'kontroll.

L-għażla u (Unicode) hija ċċekkjata awtomatikament. Kważi dejjem huwa mixtieq: mingħajrha, \w ma jagħrafx aċċenti, u xi mudelli jirritornaw żball PCRE sieket Kordi UTF-8.

Għażliet PCRE

  • i (insensittiv għall-każ): [a-z] jirrikonoxxi wkoll ittri kbar.
  • m (multiline): ^ u $ jaqblu mal-bidu u t-tmiem ta' kull linja, flimkien mal-bidu u t-tmiem biss tas-sekwenza ġenerali.
  • s (dotall): . jirrikonoxxi wkoll il-qtugħ tal-linja. Utli għal mudelli li jridu jaqsmu l-paragrafi.
  • u (unicode): tinterpreta l-mudell u s-suġġett f'UTF-8. Essenzjali hekk kif it-test fih karattri mhux ASCII (aċċenti, emoji, ideogrammi).

Eżempji ta' Regex Komuni

  • Indirizz elettroniku: [\w.+-]+@[\w-]+\.[\w.-]+ (forma simplifikata, biżżejjed għal l-aktar każijiet prattiċi; strett RFC 5322 huwa kumpless ħafna).
  • URL HTTP/HTTPS: https?://[\w.-]+(?:/[\w./?%&=-]*)?
  • Numru tat-telefon Franċiż: (?:\+33|0)\s?[1-9](?:[\s.-]?\d{2}){4}
  • Kodiċi postali Franċiż: \d{5}
  • Data ISO (SSSS-XX-JJ): \d{4}-\d{2}-\d{2}
  • indirizz IPv4: (?:\d{1,3}\.){3}\d{1,3}
  • Kelma sħiħa: foo (il-konfini tal-kliem jevitaw li jaqblu futbol).
  • Hashtag: #\w+
  • Numru tal-verżjoni semantika: \d+\.\d+\.\d+(?:-[\w.-]+)?
  • Twitter ID / X: @\w{1,15}

Gruppi maqbuda

Regex jista' jkun fih gruppi fil-parentesi, li jiżolaw porzjon tal-partita għall-użu mill-ġdid. Pereżempju, il-mudell (\w+)@(\w+\.\w+) applikat għal alice@example.com jaqbad żewġ gruppi: alice u example.com. L-għodda turi dawn il-gruppi f'kolonna iddedikat, ħdejn kull partita. Gruppi msemmija ((?P...)) huma wkoll elenkati, indiċjati bl-isem.

Biex tiggruppa mingħajr ma taqbad (utli biex jiġi applikat kwantifikatur mingħajr ma jniġġes il-lista ta 'gruppi), aħna juża (?:...).

Protezzjoni kontra ReDoS

Il-magna PCRE tal-PHP tista' tidħol f'backtracking katastrofiku għal ċerti raġunijiet patoloġiċi: mudell bħal (a+)+$ applikat għal string a twila mhux mitmuma tista' timblokka is-server għal diversi sekondi. Biex tiġi evitata danespressjoni regolari ċaħda tas-servizz (ReDoS), l-għodda tapplika żewġ limiti:

  • a set_time_limit(2) fuq in-naħa tal-ħaddiem (l-ipproċessar jieqaf wara 2 sekondi);
  • tnaqqas pcre.backtrack_limit għal 100,000, li tikkawża li l-mudelli jfallu malajr li jesploraw wisq kombinazzjonijiet.

F'każ ta 'raġuni għalja wisq, l-għodda turi l-messaġġ ta' żball PCRE (preg_last_error_msg()), tipikament Il-limitu ta' l-intraċċar kien eżawrit. Ifformula mill-ġdid tiegħek mudell li juża kwantifikaturi possessivi (a++) jew gruppi atomiċi ((?>...)) biex tevita li tmur lura.

Mistoqsijiet frekwenti

Għaliex ir-reġex tiegħi ma taqbilx minkejja li jaħdem f'JavaScript?

Il-magna ta 'din l-għodda hija PCRE (PHP), qrib Perl. Is-sintassi hija simili ħafna għal JavaScript iżda xi karatteristiċi huma differenti: lookbehinds ta' tul varjabbli, ċerti psewdonimi Unicode, jew l-immaniġġjar default tas-sensittività tal-każ. Jekk qed tippjana li tmexxi n-naħa tal-mudell browser, ittestja wkoll f'ambjent JS.

Għaliex \w tiegħi ma jaqbadx l-aċċenti?

Mingħajr il-bandiera u, \w jirrikonoxxi biss [A-Za-z0-9_]. Bil u (Unicode), jirrikonoxxi l-ittri kollha fis-sens UCD, inklużi karattri b'aċċent. Biex tmur lil hinn, uża klassijiet Unicode: \p{L} (ittra), \p{N} (numru), \p{P} (punteġġjatura).

L-għodda tippreserva t-test tiegħi?

Le Il-mudell u s-suġġett huma pproċessati fir-RAM mill-ħaddiem PHP, mingħajr persistenza. L-ebda data sottomess mhux illoggjat.

X'għandi nagħmel jekk nirċievi messaġġ "Backtrack limit was exhausted"?

Il-mudell tiegħek imur 'il quddiem u lura wisq. Fittex għal kwantifikaturi neted tat-tip (a+)+ jew (\w+)*, li huma każijiet tipiċi ta' ReDoS. Ibdelhom b'wieħed forma mhux ambigwa: pereżempju \w+ minflok (\w+)*.

Nista' nittestja mudell b'ħafna linji?

Iva. Iċċekkja l-għażla m sabiex ^ u $ jagħrfu l-bidu u truf ta' kull linja. Barra minn hekk iċċekkja s jekk trid li . taqsam il- line breaks.

Eżempju ta' talba

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}'

Skema ta' input

Kamp Tip Meħtieġ Default
pattern string
subject text
flag_i boolean false
flag_m boolean false
flag_s boolean false
flag_u boolean true

Endpoints

  • GET https://cdrn.fr/api/v1/tools - telenka l-għodod kollha disponibbli
  • GET https://cdrn.fr/api/v1/tools/regex-tester - tikseb l-iskema ta' din l-għodda
  • POST https://cdrn.fr/api/v1/tools/regex-tester/execute - teżegwixxi din l-għodda b'payload JSON