Home   FORUM   Toplista   HTML   CSS   JavaScript   PHP   DIZAJN   SEO   Mapa
KONTAKT
izuzetan[at]gmail.com






TOP LISTA SAJTOVA

Regularni izrazi i PCRE sintaksa

Regularni izraz (engl. skr. regexp ili regex, u množini regexps, regexes ili regexen) je string koji opisuje, menja ili sparuje skup stringova, u skladu sa određenim sintaksnim pravilima.

Regularni izrazi proširuju mogućnosti manipulacijom stringova u odnosu na funkcije koje smo do sada koristili za opisivanje, zamenu ili spajanje stringova.

Mi će mo ovde razmatrati PCRE sintaksu (engl. Perl compatible regular expressions), koja je implementacija regularnih izraza u programskom jeziku Perl. PCRE imaju bogatiju i predvidljiviju sintaksu čak i od proširenih POSIX regularnih izraza.

Tek nakon razmatranja sintakse regularnih izraza mi će mo videti kako se konkretno oni upotrebljavaju u PHP-u, odnosno razmatraćemo regularne izraze u PHP-u kao parametre unutar sledećih funkcija:

  • preg_ filter
  • preg_ grep
  • preg_ last_ error
  • preg_ match_ all
  • preg_ match
  • preg_ quote
  • preg_ replace_ callback
  • preg_ replace
  • preg_ split

PCRE sintaksa regularnih izraza

Sintaksa regularnih izraza se sastoji od raznih slovnih ili drugih znakova slično kao na primer sintaksni znakovi u matematici. Jedina razlika je u tome što matematički znaci izvršavaju akcije sabiranja, množenja itd. nad brojevima a znaci regularnih izraza izvršavaju akcije nad slovima, raznim tekstualnim ili brojčanim znacima ili pak nad čitavim tekstovima. Svaki znak definiše neku akciju nad stringovima. Takodje ti znakovi mogu medjusobno malte ne neograničeno da se kombinuju i pri tome rezultiraju razne, gotovo beskonačan broj mogućnosti i radnje nad stringovima.

Evo spisak i objašnjenje sintakse regularnih izraza:

  1. . - Tačka pronalazi bilo koji znak, odnosno drugim rečima zamenjuje bilo koji znak.
  2. [] - Pronalazi bilo koji znak koji se nalazi u uglastim zagradama. Na primer [abc] pronalazi a, b i c, ali ne i ostale znakove.
  3. [ - ] - Pronalazi bilo koji znak koji se nalazi u uglastim zagradama a minus je između znaka. Na primer [a-c] pronalazi a, b i c, ali ne i ostale znakove.
  4. [^ ] - Pronalazi bilo koji znak osim onih koji se nalaze u uglastim zagradama. Na primer [^abc] pronalazi sve znakove osim a, b i c, jer znak ^ unutar uglastih zagrada znači negaciju a izvan uglastih zagrada objašnjenje u sledećem redu
  5. ^ - Ukoliko je ovo prvi znak regularnog izraza izvan uglastih zagrada, onda on označava da izraz mora biti pronađen na početku stringa. Na primer ako imamo ^abc onda možemo tražiti u stringu samo ako string na početku ima abc na primer abcdefg
  6. $ - Sve isto kao i za znak ^, samo što se odnosi da izraz mora biti pronadjen na kraju stringa. Znak $ se piše na kraju, na primer abc$
  7. * - Znak za množenje pronalazi 0 ili više puta prethodni znak. Na primjer bo* pronalazi b, bo i boo i slično.
  8. + - Pronalazi jednom ili više puta prethodni znak. Na primjer bo+ će pronaći bo i boo, ali neće b kao što je to bio slučaj gore
  9. ? - Pronalazi niti jednom ili jednom prethodni znak. Na primer bo? će pronaći b i bo, ali neće boo.
  10. {n} - Gdje je n pozitivan ceo broj,  pronalazi prethodni znak točno n puta. Na primer o{2} pronalazi samo oo.
  11. {n,} - Kao gore samo ima još i zarez, pronalazi prethodni znak najmanje n puta. Na primer o{2,} pronalazi oo, ooo, oooo, itd.
  12. {n,m} - Gdje su n i m celi pozitivni brojevi, pronalazi prethodni znak najmanje n, a najviše m puta. Na primer o{2,3} pronalazi oo i samo još ooo.
  13. ( ) - Pronalazi bilo koju sekvencu unutar zagrada. Na primer ako ga kombinujemo sa znakom + imaćemo: (ab)+ pronalazi ab, abab, ababab i tako dalje. Zagrade nam znači služe za grupisanje znakova, tako da kvantifikatori *, +,? i { } na njih gledaju kao na jedan znak.
  14. | - Logički ILI operator nad regularnim znakovima. Na primer prvo|drugo pronalazi prvo ili drugo, a na primer R(1|2) pronalazi R1 ili R2.
  15. \ - Obrnuta kosa crta tretira specijalne znakove literalno, odnosno kao obične znakove. Na primer znak + označava pronađi prethodni znak jednom ili više puta, dok \+ pronalazi baš znak + kao da je običan znak. Svi znakovi * ? + . (  )  {  }  [  ]  ^  \ $ su sintaksni znakovi regularnih izraza a postaju literalni ako ispred njih stavimo znak " \ ". Literalni znak je onaj znak koji pronalazi sam sebe.
  16. \n - Pronalazi znak kraja linije.
  17. \r - Pronalazi carriage-return znak. U Windows -ima se kraj linije označava sa \n\r, ali će i sami \n u većini programa pronaći kraj linije.
  18. \t - Pronalazi tabulator. Kontrolni znakovi \a, \e, \f, \v osim \n, \r i \t su praktično izumrli, pa ih ovde nema potrebe opisivati.

Perl proširenja:

  1. \C - Pronalazi bilo koji znak. Ekvivalentno tački " . "
  2. \d - Pronalazi broj. Ekvivalentno izrazu [0-9]
  3. \D - Pronalazi bilo koji znak osim brojeva. Ekvivalentno izrazu [^0-9]
  4. \l - (malo slovo L) Pronalazi mala slova uključujući i internacionalna slova. Za srpski jezik ekvivalentno izrazu [a-zčćđšž].
  5. \L - Pronalazi bilo koji znak osim mala slova. Za srpski jezik ekvivalentno izrazu [^a-zčćđšž].
  6. \s - Pronalazi bilo koji razmak (space) uključujući i tabulatore. Ekvivalentno izrazu [\t\n\r\f\v].
  7. \S - Pronalazi bilo koji znak koji nije razmak (tabulator). Ekvivalentno izrazu [^\t\n\r\f\v].
  8. \u - Pronalazi bilo koje veliko slovo uključujući i internacionalna slova. Za srpski jezik ekvivalentno izrazu [A-ZČĆĐŠŽ].
  9. \U - Pronalazi bilo koji znak osim velikih slova. Za srpski jezik ekvivalentno izrazu [^A-ZČĆĐŠŽ].
  10. \w - Pronalazi bilo koji word znak. Word znakovi su slova, brojevi i podvučeno. Naime radi se o znakovima koji se u C/C++ jeziku mogu koristiti za varijable, funkcije itd.
  11. \W - Pronalazi bilo koji znak osim word znakova.
  12. \0dd - Pronalazi znak sa ovim oktalnim ASCII/ANSI kodom. Gdje je dd jedan ili više oktalnih brojeva.
  13. \xXX - Pronalazi znak sa ovim heksadecimalnim ASCII/ANSI kodom. Gdje je xx jedan ili heksadecimalni broj.

Ove oznake su dovoljne za većinu stvari ali ima ih još. Kompletan spisak vezano za PHP možete naći na LINK.

Regularni izraz uzorka u PHP sa PCRE sintaksom uvek se piše u navodnicima, jednostrukim ili dvostrukim, ali izmedju dve kose crte! Te dve kose crte su granični znaci uzorka regularnog izraza. Evo primera: "/^[0-9]{8}$/" . A ako vam se ne svidja kosa crta kao graničnik može potpuno ravnopravno da stoji znak @ ili čak i znak ~. Na primer izgledalo bi: "@^[0-9]{8}$@". Ako sad stavimo i znak " i " nakon graničnika na primer ovako "/^[A-Z]{8}$/i" to će značiti pretraživanje bez uzimanja u obzir da li su slova mala ili velika. Ako je bez " i " onda uzima u obzir veličinu slova. Znakovi ^ i $ u "/^[0-9]{8}$/" govore da se traže samo 8 broja. Znači nebi prošo ovakav string: ab12345678, jer ne sadrši samo 8 broja, a bez znakova ^ i $ bi prošlo. Korišćenjem specijalnog znaka \b na krajevima izraza, a bez znakova ^ i $ dobijamo isti efekat:"/\b[0-9]{8}\b/"

Copyright © 2010 BUbaj. Powered By bubaj.com
PHP    PHP sintaksa    Fajl    Niz    String    Funkcija    Objektno programiranje    MySQL    Unos fajla    Datum    Forme    Sesija    Registracija