Klase znakova u regularnim izrazima

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...

  1. A. Watt (2005): Beginning Regular Expressions, Wiley Publishing, Indianapolis
  2. 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.