Pogčedajte punu verziju : Kako se matchuju parovi?
bluesman
10. 09. 2007., 15:01
Imam regexp koji treba da pronadje u tekstu sve parove nesto i zameni za <a href=''>nesto</a>:
Pattern izgleda ovako:
"\(.+)?\[\/c\]"
Kada unesem tekst sa jednim onda je sve ok, cim ih ima vise od 1 on nadje prvi i poslednji i zameni sve izmedju. znaci za ovaj teksto:
Proba jedan i jos dva kraj
Zameni sve od prvog do zadnjeg za link, a treba mi po parovima, znaci on zameni ovako:
Proba <a href=''>jedan i jos [c]dva</a> kraj
a treba mi:
Proba <a href=''>jedan</a> i jos <a href=''>dva</a> kraj.
Da li ja nesto ne kapiram dobro kako u stvari funksionise eregi ?
Blood
10. 09. 2007., 15:15
Ne znam za eregi, nikad ga nisam koristio, ali preko preg_replace bi islo ovako:
$string = 'Proba jedan i jos dva kraj';
$pattern = '{\[c\](.*?)\[\/c\]}';
$rep = '<a href="">${1}</a>';
echo preg_replace($pattern,$rep,$string);
dinke
10. 09. 2007., 15:37
preg* f-je su uz to i brze, tako da generalno uvek preporucujem njihovo koriscenje, tim pre sto podrzavaju posix subset (tj. mozes koristiti istu sintaksu kao i kod ereg* f-ja).
Inace, poenta je staviti (.*?) kao sto je napisao blood. Po defaultu kod regexpa match je "greedy" tj. pokusava da pronadje najveci moguci match. U tvom slucaju pokupi sve izmedju prvog i poslednjeg (ukljucujuci i ko zna koliko istih unutra). Ovaj '?' u ovom slucaju pak to iskljucuje, tj. onda hvata prvi moguci match i ne trazi dalje.
bluesman
10. 09. 2007., 16:01
preg* f-je su uz to i brze, tako da generalno uvek preporucujem njihovo koriscenje, tim pre sto podrzavaju posix subset (tj. mozes koristiti istu sintaksu kao i kod ereg* f-ja).
Prvo znam, ali mi je sintaksa bila teze razumljiva, zato sam uvek koristio ereg... ali si mi sada dao kljucnu informaciju - ako mogu da koriste istu sintaksu kao ereg... onda sam resio sve probleme. Hvala.
dinke
10. 09. 2007., 19:54
Potpuno isto, jedino sto kod preg* f-ja koristis delimiter (recimo "/") na pocetku i kraju regexp stringa. Primer:
ereg:
ereg ("([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})", $date, $regs)
preg_match:
preg_match ("/([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})/", $date, $regs)
robi-bobi
10. 09. 2007., 20:36
ja uglavnom stavljam U modifier posle drugog delimitera, za resenje greedy problema, koji resava problem globalno a ne na nivou jednog item-a. ionako meni skoro nikad ne treba greedy match
http://bg.php.net/manual/en/reference.pcre.pattern.modifiers.php
vBulletin® v3.6.8, Copyright ©2000-2009, Jelsoft Enterprises Ltd.