Čo robí nasledujúci Regex?
d{1,3}.?d{0,3}s[0-9a-zA-Z. -]{4,40}
Chápem, d je za číslicu, ale čo robí 1,3.
Ak niekto môže ďalej vysvetliť, že by to bolo ocenené
odpovede:
2 pre odpoveď č. 1{n,m}
je kvantifikátor, ktorý znamená "najmenej n krát, najviac m krát". Rovnako ako všetky kvantifikátory je štandardne chamtivý a pre dialekty regexu, ktoré ich podporujú, má tiež lenivé a vlastné verzie ({n,m}?
a {n,m}+
- .NET podporuje bývalú, ale nie druhú, bohužiaľ).
ak n
nie je špecifikované, je 0; ak m
nie je zadané, je to nekonečno.
To znamená, že môžete "prepísať" klasickú *
, +
a ?
pomocou tohto kvantifikátora:
*
je{0,}
;+
je{1,}
;?
je{0,1}
.
(poznámka: Myslím, že .
v .?
bola určená ako doslovná bodka, čo znamená, že by sa mala utiecť, to znamená .?
; bodka v regexe znamená "ľubovoľný znak", s výnimkou triedy znakov.)
Pokiaľ ide o samotný regex:
d{1,3} # match a digit, one to three times, followed by
.? # any character, 0 or one time (see my remark), followed by
d{0,3} # a digit, zero to three times, followed by
s # a space character, followed by
[0-9a-zA-Z. -] # a digit, or any letter, or a dot, or a space, or a hyphen,
{4,40} # 4 to 40 times
Nakoniec je potrebné poznamenať, že d
v jazykoch .NET sa neobmedzuje na 0-9, môže sa zhodovať s ďalšími číslicami Unicode.
upraviť: regex, opravený, berúc do úvahy komentár @AlanMoore, by bol:
d{1,3}(.d{1,3})?s[0-9a-zA-Z. -]{4,40}
Možno aj tento regex by mal byť ukotvený ... Ale to je len odhad.