Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

preg_replace replacement paramatar funkcije???

[es] :: PHP :: preg_replace replacement paramatar funkcije???

[ Pregleda: 1500 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

iizuzetan

Član broj: 186478
Poruke: 375
*.adsl.verat.net.



+16 Profil

icon preg_replace replacement paramatar funkcije???02.11.2009. u 15:45 - pre 176 meseci
Jel zna neko nesto o $n (ili ovako nesto \${1}1 i slicno) referenci u replacement parametru PHP funkcije preg_replace? Ako zna neka ne bude lenj i sve lepo neka objasni sa primerima. Ali sa sto prostijim primerima u regularnim izrazima da ne bi ljudi zapeli na tumacenju regularnih izraza.

Pretpostavljam da zna neko obzirom da verovatno mnogi znate engleski. Ja ne znam engleski tako da ne mogu da prokljuvim o cemu se radi. Naravno o tome nema ni slovce objasnjenja na nasem jeziku nigde.

izmenio Nemanja: Uklonjen offtopic

[Ovu poruku je menjao Nemanja Avramović dana 02.11.2009. u 16:57 GMT+1]
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: preg_replace replacement paramatar funkcije???02.11.2009. u 17:56 - pre 176 meseci
Nadam se da si bar pogledao primere u manual-u, na stranici preg_replace() funkcije. Evo ja ću da pokušam da ti objasnim prvi od njih, pošto vidim da se u njemu koristi referenciranje:
Code:

$string = 'April 15, 2003';
$pattern = '/(\w+) (\d+), (\d+)/i';
$replacement = '${1}1,$3';
echo preg_replace($pattern, $replacement, $string);

Krajni rezultat - od ovoga: April 15, 2003, dobijaš ovo: April1,2003.

E sad, koja je logika... Funkcija preg_replace() radi na isti način kao i preg_match(), s tim što ona ono što nađe menja sa onim što joj proslediš kao drugi argument. Benefiti u odnosu na recimo str_replace su što tu zamenu možeš malo i da zakomplikuješ. Eto pogledaj šta se recimo dešava u tom primeru... Ti za zamenu koristiš ono što si pronašao, tačnije koristiš prvi i treći subpattern. To su te cifre 1 i 3 u $replacement promenljivi, a one odgovaraju ovome: (\w+) i ovome (\d+), pri čemu se misli na taj drugi \d+. Nadam se da te ne buni ta sintaksa korišćenja backslash-eva, to \w predstavlja bilo koju reč, a \d je bilo koja cifra. Takođe, primeti da je ta prva referenca u $replacement promenljivi uokvirena sa vitičastim zagradama. To je zato što iza nje sledi znak "1" (to je onaj kec odma' posle April u "April1,2003"), a da nisi stavio te zagrade, funckija bi pomislila da ti hoćeš referencu broj 11, a ne 1. I šta se dešava, umesto celog tog stringa $string, kao rezultat dobijaš string upravo u tom obliku kojeg si poslao u $replacement promenljivoj, s tim što umesto tih brojnih referenci (${1} i $3), dolaze odgovarajući pronađeni subpattern-i iz $pattern promenljive.

Nadam se da sam bio jasan.
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
85.222.178.*



+16 Profil

icon Re: preg_replace replacement paramatar funkcije???02.11.2009. u 19:41 - pre 176 meseci
Citat:
Nikola Poša

Ti za zamenu koristiš ono što si pronašao, tačnije koristiš prvi i treći subpattern. To su te cifre 1 i 3 u $replacement promenljivi, a one odgovaraju ovome: (\w+) i ovome (\d+), pri čemu se misli na taj drugi \d+.



Hvala na dobroj volji. Naravno da sam pogledao sve u vezi te funkcije na zvanicnom sajtu ali kako ne razumem engleski i kako nisam razumeo upravo taj primer, jer nije bas srecno izabran, zato sam i zatrazio pomoc. Objasnio si ali naravno jos uvek mi nije nista jasno. Ajdemo da dotaknemo sustinu stvari.

Citirao sam tvoje reci koje pokusavaju da dotaknu sustinu, pa da ih malo prosirimo.

Kako mislis da koristim za zamenu ono sto sam pronasao??? Valjda se zamenjuje upravo to sto se pronadje? Jer koja je logika zameniti nesto samim sobom? Neznam moguce je da si pogresio, jedno si mislio a drugo napisao.

Za zamenu se koristi $replacement promenljiva, jel tako? A u nasem slucaju ona glasi '${1}1,$3'. E sad koliko sam skapirao ${1} i ,$3 je sintaksa, a jedino je znak 1 u celom tom stringu koji se koristi za zamenu?

Ako je tako ajdemo da jos preciziramo sintaksu posto nisam skapirao :

1. Sintaksa '${1} sta 'govori' bilo kom regularnom izrazu?
2. Sintaksa '${1}1 sta 'govori' bilo kom regularnom izrazu?
3. Sintaksa ,$3' sta 'govori' bilo kom regularnom izrazu?
i konacno
4. Sintaksa '${1}1,$3' sta 'govori' bilo kom regularnom izrazu?

E sad na primer kako gornja sintaksa ima uticaj na regularan izraz, lupam '/abc/' ?
Ili na regularni izraz '/acf{2}/', i tako dalje.

Ili sintaksa u $replacement stringu moze da ima uticaj samo na neke regularne izraze koji moraju da zadovolje neka pravila u pisanju???

Na kraju, mozda su sva ova moja pitanja totalno glupa za nekog ko se razume u problematiku, ali to je zato jer ja ne razumem sve to.

 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-1.sezampro.yu.



+33 Profil

icon Re: preg_replace replacement paramatar funkcije???02.11.2009. u 20:49 - pre 176 meseci
Au, ja sam očekivao da ćeš ti to odma' skapirati...

Gledaj, ti si za replacement promenljivu mogao da staviš bilo šta. Da si za njenu vrednost stavio string "test", rezultat izvršavanja tog koda bi bio upravo "test". Da li je najpre to jasno? E sad, ti u tu promenljivu koju šalješ kao drugi argument funkcije preg_replace() možeš da ubaciš i određene, da ih nazovem, placeholder-e, na čije mesto će doći pronađeni subpattern-i iz onog celog pattern-a (prvi argument funkcije preg_replace()). I sad, da je pattern ostao takav kakav jeste, a da promenljiva $replacement ima ovu vrednost: 'test$1', rezultaz izvršavanja koda bi bio: testApril. Dakle, prvi pronađeni subpattern je April, i on će doći na mesto te reference sa rednim brojem 1. Da si umesto 1 stavio 2, umesto April, imao bi vrednost drugog subpattern-a, da si stavio 3 imao bi vrednost trećeg, itd., itd. Nema tu nikakvih sintaksnih pravila, ti određuješ kako će da izgleda zamena (replacement).

Jasno?
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
85.222.178.*



+16 Profil

icon Re: preg_replace replacement paramatar funkcije???02.11.2009. u 21:17 - pre 176 meseci
Cekaj da nije mozda caka u tome da kad se pise regularni izraz za te zebancije tipa $n uvek mora zagrada tipa '/()()()()/' (normalno u zagradi nesto) pa onda to u zagradi prvo je $1, druga zagrada je $2, treca $3 itd? I onda kad pisemo taj $replicement string kombinujemo sta i kako hocemo, na primer lupam prvo da ide $4, pa onda izmedju moze neki znaci da se ubace, pa onda recimo $1 pa opet nesto pa onda primera radi $3 itd?

Elem zagrade u regularnom izrazu je kljuc svega?
 
Odgovor na temu

iizuzetan

Član broj: 186478
Poruke: 375
85.222.178.*



+16 Profil

icon Re: preg_replace replacement paramatar funkcije???02.11.2009. u 22:00 - pre 176 meseci
Evo jedan primer primeran za one koji uce, a ne onaj na zvanicnom sajtu!

Code:

<?

$string = 'se####der jru, rt@@@@dfrtg. Jkjt jdydy y&&&&hbwef';
$pattern = '/(.{2})(####)(.{11})(@@@@)(.{19})(&&&&)(.{5})/';

$replacement = '$4$6$2';
echo preg_replace($pattern, $replacement, $string);
//Rezultat: @@@@&&&&####

$replacement = '$4$3$6';
echo preg_replace($pattern, $replacement, $string);
//Rezultat: @@@@der jru, rt&&&&
?>
 
Odgovor na temu

[es] :: PHP :: preg_replace replacement paramatar funkcije???

[ Pregleda: 1500 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.