# Početak

# Osnovno

# Instalacija

# Struktura programa

# Varijable

# Kontrolne strukture

# Funkcije

# Regularni izrazi >

# U/I operatori

# Sistemski operatori

# Želim znati više!

# HR Perl

Perlovi regularni izrazi

Regularni izrazi su Perlov pojam za znakove ili posebne znakovne (pod)nizove koji se žele pronaći unutar drugih znakovnih nizova. Regularni izrazi zapravo predstavljaju točno definirane uzorke znakovnih nizova (eng. patterns). Ti uzorci ne služe samo za pronalaženje tih uzoraka u drugim nizovima, već i za ostale operacije kao što je na primjer zamjena pronađenog uzorka u nizu nekim drugim znakovnim nizom. Tip operacije ovisi o primjenjenom operatoru.

Detaljnije o regularnim izrazima može se vidjeti u perlretut i perlre man stranicama.

Regularni izrazi u Perlu se definiraju na točno određen način. Najuobičajeni način definiranja je postavljanjem znakovnog niza (uzorka) unutar znakova /:

/neki_niz_znakova/
/stjepan_98/
Osim znaka / može se koristiti neki drugi ne-alfanumerički znak, samo je potrebno naglasiti znakom m:
m#uzorak#
m@stjepan_98@

Definirani regularni izraz se pretražuje u preodređenoj varijabli $_. Želi li se regularni izraz pretraživati unutar neke prethodno definirane varijable, tada se koristi operator =~:

$imena =~ /marko/;

Ukoliko se u varijabli $imena nalazi uzorak "marko", cijeli izraz vraća TRUE (u suprotnom FALSE). Budući da regularni izrazi vraćaju logički rezultat (TRUE/FALSE) vidljivo je da se oni većinom koriste kod kontrolnih struktura.

if (/ivan/)  {
  print "ivan postoji u $_\n";
}

Oblici uzoraka

Uzorci mogu biti znakovni nizovi koji se sastoje od jednog ili više znakova. Višeznakovni uzorci bili su prikazani na gornjim primjerima, dok jednoznakovni uzorci biti će prokazani kroz niz slijedećih primjera:

/.oki/
# odgovara nizu "coki," "moki", ali ne i "oki"
/[0123456789]/
# zamjenjuje bilo koji znak unutar uglatih zagrada
/[0-9]/
# isto kao i prethodni slučaj
/[^0-9]
# bilo koji znak osim brojeva
/[0-9a-zA-Z]/
# bilo koji alfanumerički znak

Predefinirane kategorije znakova su:

\d  # brojevi, [0-9]
\w  # slova, [a-zA-Z0-9_]
\s  # praznine, [ \r\t\n\f]
\D  # sve osim brojeva, [^0-9]
\W  # sve osim slova, [^a-zA-Z0-9_]
\S  # sve osim praznina, [^ \r\t\n\f]

Višeznakovni uzorci mogu u sebi sadržavati sekvencu znakova koji se ponavljaju određen broj puta. Zato u Perlu postoje specijalni znakovi kojima se definira točan broj ponavljanja u uzorku. Kroz slijedeće primjere biti će demonstrirani ti operatori:

/a*t/
# bilo koji broj znakova "a" iza kojeg slijedi "t"
/a+t/
# jedan ili više znaka "a" iza kojeg slijedi "t"
/a?t/
# nula ili jedan znak "a" iza kojeg slijedi "t"
/a{2,4}t/
# od 2 do 4 znaka "a" iza kojeg slijedi "t"
/a{2,}t/
# 2 ili više znaka "a" iza kojeg slijedi "t"
/a{2}t/
# točno 2 znaka "a" iza kojeg slijedi "t"

Za uzorke se može definirati i položaj na kojem mora biti unutar znakovnog niza koji se pretražuje. Na primjer:

/\bdr/
# \b == granica (prazninu, početak ili kraj niza) 
# uzorak odgovara za "drvo" ali ne za "odrzavanje"
/ti\b/
# uzorak odgovara za "cuti" ali ne za "tisak"
/ti\B/
# \B == ne smije biti granica na tom mjestu
# uzorak odgovara za "tisak" ali ne za "cuti"
/^tr/
# ^ == početak niza
# uzorak odgovara za "trag" ali ne za "otrovan"
/ca$/  
# $ == kraj niza
# uzorak odgovara za "kuca" ali ne za "cavao"

Operatori regularnih izraza

Najčešće korišten operator je zamjena koja je formulirana na slijedeći način:

$niz =~ s/uzorak/zamjena_za_uzorak/

Uzorak se pretražuje unutar varijable (skalara) $niz, te se svaki uzorak koji se podudara s njime zamjenjuje definiranim znakovnim nizom. Primjeri:

s/marko/ivan/
# zamjenjuje se "marko" s "ivan" (unutar $_)
s/marko/ivan/gi
# isto kao i prethodni samo operator sada
# nije osjetljiv na velika i mala slova  
$a =~ s/marko/ivan/
# ista operacija se izvodi nad $a

Operator split() vraća polje skalara (znakovnih nizova) koji se nalaze između pronađenih uzoraka. Primjeri:

@var = split(/pattern/, $znak_niz);
@var = split(/pattern/);

Ukoliko nije definiran znakovni niz, uzima se sadržaj varijable $_.

Još jedan važan operator je join(). On uzima polje skalara (znakovnih nizova), te ih spaja dodajući između njih definirani znakovni niz:

@imena = ("ivan", "marko", "stjepan");
$a = join(" + ", @imena);
# kao rezultat skalar $a će sadržavati
# niz "ivan + marko + stjepan"

Copyright © 2003 Ognjen Krkač
E-mail & MSN Messenger: ogy_1298@hotmail.com