Home FORUM Toplista HTML CSS JavaScript PHP DIZAJN SEO Mapa |
![]() |
![]() |
![]() |
![]() |
![]() |
Funkcija preg_replacePrethodne dve funkcije koje smo razmatrali pronalaze ono što smo definisali u regularnom izrazu i ako nadju vraćaju to što nadju. Funkcija preg_replace radi drugačije, ona ono što pronadje zameni sa stringom koga takodje definišemo u toj funkciji. Evo prototipa:
Funkcija pronalazi $regularni_izraz u $tekst i kad nadje zamenjuje sa $zamena. Ako je zadato $ogranicenje, zamenjuje se samo toliki broj podudaranja koliki je broj u $ogranicenje. Ako $ogranicenje nije zadato ili je jednako -1, zamenjuju se sva podudaranja. Evo primera:
Rezultat: aaazzzz wwww zzzz54637823E sad $regularni_izraz može biti i niz. Primer sve objašnjava:
Rezultat će biti: @@@ @@@ @@@ dejan mala sasa @@@ @@@Znači gde god funkcija nadje bilo koji od uzoraka u tekstu zameniće ga. Normalno da smo stavili za četvrti parametar na primer broj 2 onda bi rezultat bio: @@@ @@@ ccc dejan mala sasa bbb aaa Takodje i $zamena može biti niz. Ajde da vidimo:
Rezultat je: @@@ *** ^^^ dejan mala sasa *** @@@Znači gde god se naidje na uzorak sa indeksom 0 zamenjuje se sa zamenom sa indeksom 0, a kad se naidje na uzorak u tekstu sa indeksom 1 zamenjuje se sa zamenom koja ima indeks 1, i tako dalje. E sad ako ima na primer više uzoraka od zamena, kad se istroše zamene posle toga se zamenjuje sa prazninom. A ako ima manje uzoraka od zamena onda se traže samo oni uzorci koji postoje i oni se zamenjuju. I $tekst može biti niz. Evo kako to izgleda:
Rezultat je: @@@ *** ^^^ 1111111111@@@ *** ^^^ 111111111 @@@ *** ^^^ Ovde nema potrebe da se objašnjava pošto je valjda sve jasno. E sad parametar $zamena može imati odredjene varijacije još. Do sada smo funkcijom preg_replace tražili uzorak u tekstu i kad se nadje zameni se sa $zamena. Znači vraća se ceo tekst sa odredjenim izmenama. Medjutim postoji varijanta da se ne vrati ceo tekst (ali ako podesimo i može), već da se izvuku pronadjeni delovi teksta definisani uzorkom i da se poredjaju kako nam je volja i da se ubace znakovi po želji šta nam je volja, i kako nam je volja. Ovo ovako napisano možda deluje totalno nejasno ali primeri će sve razjasniti:
Rezultat je:
@@@@&&&&#### Ponekad je bitno znati unapred formu (pravilo) teksta u stringu $tekst. Šta to znači? Ne moramo znati tačno sve znakove teksta koji se mogu pojaviti, ali moramo znati odredjena pravila koliko znaka, kog oblika i u kom delu teksta će se znaci pojavljivati u stringu koga ispitujemo. Na primer svi znamo da se imena sajtova pišu u formi http://ime-sajta.com . E sad forma je sledeća, imamo uvek http:// na istom mestu sa istim znacima. Pa zatim ime sajta koje može imati na primer mala ili velika slova, tačku, srednju i donju crtu, itd. Pa zatim .com, ili .net koje su isto konstante itd. Znači domeni sajtova imaju svoju formu. U tom smislu za naredne stvari koje slede moramo znati formu stringa $tekst. U našem konkretnom slučaju string $tekst je: "se####der jru, rt@@@@dfrtg. Jkjt jdydy y&&&&hbwef" . A formu stringa $tekst moramo pretočiti u regularan izraz i to tako da taj regularan izraz opisuje uvek validno eventualne sve varijacije stringa $tekst (ili bar koliko god je to moguće). Regularan izraz za naš konkretan $tekst bi pravili ovako: Imamo prvo "se" a na primer to može u nekim varijacijama teksta da bude kombinacija bilo koja moguća dva znaka. Ako je tako onda "se" možemo pretstaviti u reg. izrazu kao (.{2}). Zatim imamo "####" i recimo neka bude to uvek fiksno četri tarabe. To bi onda u reg. izrazu moglo da se zapiše kao (####). Krenimo tom logikom na dalje i biće:
Kad se svi ovi delovi regularnog izraza spoje dobićemo jedan regularan izraz koji potpuno opisuje našu tekst formu. On bi glasio:
Regularni izraz $uzorak se sastoji od nekoliko zagrada. Mada nije pravilo da mora da se sastoji samo od zagrada. Može se sastojati u nekim slučajevima i od zagrada i od još nekih znakova izvan zagrada. Medjutim u našem konkretnom slučaju šematski naš regularni izraz možemo pretstaviti:
Obeležimo sad svaku od tih zagrada sa redom $1, $2, $3, $4, $5, $6, $7. Napomena je da $1, $2 i ostali, se odnose isključivo na zagrade (i ono što se nalazi u njima naravno) bez obzira što se reg. izraz uzorka kao što smo napomenuli može sastojati još od nekih znakova izvan zagrada. Time smo dobili "reči" regularnog izraza. I sad ono što je ključno, te "reči" možemo kombinovati u parametru $zamena funkcije preg_replace kako nam je volja. Na primer mi smo koristili 3 kombinacije u primeru, ali naravno mogućnosti su neograničene. Na primer mogu da se reči ponavljaju, kombinuju više puta i to sve "reči" ili samo neke, odnosno možete pustiti mašti na volju. E sad onako kako iskombinujemo "reči" u $uzorak tako će i funkcija preg_replace i vratiti. Konkretno u našem primeru je preg_replace vratila ono što se nalazi u $a1, $a2 i $a3. Ako pogledamo u primeru videćemo da smo u jednom trenutku za zamenu napisali $zamena = "${4}8888$3POSAO$6". Kao što vidimo ne moramo samo pisati $1$2$3 itd. već izmednju njih možemo pisati slova, brojeve ili bilo koje druge znakove. Medjutim ako se piše broj onda mora stajati redni broj reči u vitičastim zagradama da funkcija ne bi pomešala. Na primer da smo napisali $48888, funkcija bi to protumačila kao 48 888 "reč". Reči mogu da idu od 0 do 99. Znači $0, $1, $2, $3, ..., $99. Kad je $0 onda se tako zamenjuju sve reči poredjane od najmanje do najveće. Znači u našem slučaju $0 je ekvivalentno kao da smo napisali $1$2$3$4$5$6$7. Napomenuli smo da se regularni izraz ne mora "raslojiti" samo od zagrada, pa da to potkrepimo i primerom da bi sve bilo jasno:
Rezultat: April1,2003 $uzork je ovako napravljen: (\w+) - svi word znaci (a oni ne sadrže kao što znamo i razmaknicu). To drugim rečima znači da taj deo reg. izraza ide samo do razmaknice u tekstu, to jest obuhvata u ovoj varijanti teksta samo "April". Medjutim takodje reg. izraz govori da ne mora tu stajati uvek samo 5 word znaka već najmanje jedan znak i više jer figuriše i reg. znak +. Znači tu može u nekim varijacijama teksta na primer stajati i R43Uurthfzt ili pak samo jedan word znak, ali ne ni jedan znak. Da je stajao reg izraz znak množenja onda bi obuhvatao i "ni jedan znak". Zatim reg. izraz se sastoji od razmaknice i u nastavku (\d+). Kao što znamo "\d" zamenjuje sve brojeve, a pošto ima i reg. znak "+" u nastavku znači da tu može figurisati u raznim varijantama jedan ili neograničen broj brojeva. Zatim zarez kao fiksni koga smo napisali samostalno. Ali mogli smo i u zagradi (\,), ali zbog konkrtnog objašnjenja da izvan zagrada može da stoje i još neki znaci (u konkretnom primeru su zarez i dve razmaknice), stavili smo zarez izvan zagrada. Kao što vidimo da bi smo stavili kao literal znak zarez u bilo kojoj zagradi reg. izraza, moramo staviti i kosu crtu ispred zareza jer zarez je sintaksa regularnih izraza unutar zagrada, a izvan zagrada nije sintaksa pa može stajati bez kose crte. Zatim ide razmaknica opet, i na kraju opet deo reg. izraz za brojeve koji definiše jedan i više brojeva (\d+). Zamenu smo definisali kao "${1}1,$3". Reč ${1} označava prvu zagradu u reg izrazu, a reg izraz sa prvom zagradom u našem konkretnom tekstu nalazi "April". Zatim ide "slobodan" literal znak 1 i zarez , i na kraju $3 koji označava treću zagradu koja definiše i pronalazi u tekstu string "2003". Sve ovo kad se spoji dobijamo rezultat April1,2003. Poenta u ovom primeru je znači da i u $zamena mogu da stoje slobodno znaci, ili oni koji nam trebaju iz uzorka koje smo smestili izvan zagrada pa ne možemo da ih definišemo nekim $n izrazom, ili sasvim neki novi po našoj želji. I na kraju treba dodati da su ovde korišćeni prostiji regularni izrazi jer je fokus bio na što boljem objašnjenju funkcije. Složenije primere reg. izraza i još neke stvari vezane za funkciju možete videti na LINK |
![]() |
Copyright © 2010 BUbaj. Powered By bubaj.com |
PHP PHP sintaksa Fajl Niz String Funkcija Objektno programiranje MySQL Unos fajla Datum Forme Sesija Registracija |