Osnovna veština koju moramo savladati kod regularnih izraza je definisanje klase znakova,
odnosno određivanje šta predstavlja znak. Već su nam poznati neki korisni džoker znakovi,
npr. tačka . (bilo koji znak), metaznak \d (bilo koja cifra) i sl.
Klase omogućavaju da baš precizno definišemo koji znak se traži, ali su zato "gabaritnije" i
nečitljivije.
Klasu definišemo pomoću uglastih zagrada[...] unutar kojih prosto
navodimo šta od znakova "ulazi" u klasu.
Ako klasu započnemo kvačicom ^, onda definišemo negativnu klasu, odnosno "kažemo"
da treba pronaći svaki znak koji nije naveden u klasi.
[XYZ]
jedan znak koji može biti bilo koji iz skupa navedenih znakova X, Y ili Z
[X-Y]
jedan znak koji može biti bilo koji iz ranga znakova od X do Y.
Rang se uvek navodi od "manjeg" do "većeg" znaka (znači može "A-Z", ne može "Z-A").
[^X-Yxyz]
bilo koji znak koji nije naveden među znakovima klase
Najbolje ćemo objasniti klasu znakova pomoću primera. Slobodno menjajte šablone i tekstove kako biste isprobali
ponašanje raznih varijanti regularnog izraza.
Bukvalan tekst
Pera
g
Pera je pravo derište.
Do sada znamo da kad navedmo neki tekst (u kome može i ne mora biti metaznakova), taj tekst predstavlja šablon koji se traži.
Tako ovaj šablon označava bukvalno tekst "Pera"
Klasa znakova
[Pera]
g
Pera je pravo derište.
Pogledajmo prvo šta to znači da definišemo "jedan znak". Sada smo znakove smestili unutar uglastih zagrada [].
To znači da se "Pera" više ne posmatra kao celovit tekst, već kao skup znakova. Ova uglasta zagrada u stvari
označava samo jedan znak koji može biti "P", "e", "r" ili "a".
Primer - pronađite samoglasnike
[aeiouAEIOU]
g
Teško je pronaći reč bez samoglasnika.
Evo jednog tipičnog primera kada učimo klase znakova. Potrebno je napraviti klasu koja se odnosi na samoglasnik.
Unutar zagrada navodimo sve samoglasnike i to i mala i velika slova (možemo i samo jednu varijantu, ali sa uključenim
modifikatorom i). Ovako zadata klasa označava znak koji predstavlja samoglasnik.
Vodite računa - ako negde unutar uglastih zagrada otkucate i razmak (zbog preglednosti), to će se takođe računati
znak koji treba pronaći.
Rang znakova
[A-Z0-9]
g
Ako tražite Miru, pokušajte u Kancelariji 52.
Navođenje čitavog skupa znakova nije veoma praktično ako imamo veliki broj znakova koji treba da uđu u klasu.
U situaciji kada nam treba veliki broj znakova koji u kodnom rasporedu idu jedan za drugim, možemo koristiti
crticu, da napravimo rang - od znaka do znaka.
Prikazani šablon označava znak koji može biti bilo koje veliko slovo engleske abecede ili bilo koja cifra.
Kombinacija ranga i znakova
[a-f24680]
g
Oznake dokumenata: dz23, sa48, fa37.
Rangovi i skupovi znakova se mogu kombinovati bez problema.
Ovaj šablon označava znak koji može biti bilo koje malo slovo od "A" do "F" ili bilo koja parna cifra.
Metaznakovi unutar klase
[,;.!?]
g
Kuda, kako i zašto? Hej! Nemoj da odustaješ.
Šablon označava znak koji može biti bilo koji od navedenih znakova interpunkcije -
vidimo da unutar klase pojedini znakovi ("." i "?") nemaju svoja specijalna značenja
nego se tumače baš kao to što jesu - tačka i znak pitanja.
Preskakanje specijalnih znakova unutar klase
[+/*^\-()[\]{}]
g
3 * (x - y) / a[i] ^ 2
E, sad, jasno da i unutar klase neki znakovi imaju specijalna značenja.
Pogledajte kako smo morali da zadamo šablon koji označava znak koji može biti bilo koji od
računskih operacija ili zagrada - morali smo da vodimo računa o sledećem:
zatvorena uglasta zagrada "]" - moramo da je preskočimo, jer bi se inače tumačilo kao kraj klase
minus "-" - moramo da ga preskočimo, jer u klasi služi da definiše rang znakova
kvačica "^" - ne sme da bude na početku, jer onda označava negaciju
Negacija znakova unutar klase
[^aeiouAEIOU]
g
Teško je pronaći reč bez samoglasnika.
Evo konačno i primera za negaciju klase. Iskoristili smo raniji primer za pronalaženje
samoglasnika, kako bismo uparili znak koji nije samoglasnik -
(ako klasa počinje kvačicom, onda definišemo negativnu klasu).
Evo i ovde razloga za oprez - mogli bismo lako da se zaboravimo i pomislimo da će ova klasa
vrlo zgodno predstavljati suglasnike ("nije samoglasnik"), ali ona bukvalno predstavlja baš svaki
znak koji nije naveden u klasi - i tačke, zareze, razmake...
A. Watt (2005): Beginning Regular Expressions, Wiley Publishing, Indianapolis
J. Goyvaerts, S. Levithan (2012): Regular Expressions Cookbook, 2nd Ed, O’Reilly, Sebastopol
Svi elementi sajta Web'n'Study,
osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora
i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora.
To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies).
Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.