PDA

Pogčedajte punu verziju : Nested pattern


bluesman
21. 02. 2008., 02:29
imam obican patter koji treba da zameni recimo

neki tekst
u
<blockquote>neki tekst</blockquote>Sve to radi super, osim kada je nested:


neki tekst
neki drugi tekst


trebao bi da zameni u

<blockquote>
neki tekst
<blockquote>neki drugi tekst</blockquote>
</blockquote>

ali to ne radi. Pattern izgleda ovako:
echo preg_replace ("/\[blok\](.+)\[\/blok\]/Uis", "<blockquote>\\1</blockquote>", $text);

ppavlovic
21. 02. 2008., 03:25
Hm... Izvini sto ga (s' oprostenjem) tupim... moze li

$text = str_replace("", "<blockquote>", $text);
$text = str_replace("", "</blockquote>", $text);

Osim ako nemas neke specijalne potrebe za preg_replace ...

ivanhoe
21. 02. 2008., 03:48
ovako nekako:

function parseTagsRecursive($input) {
$regex = '#\((?:[^[]|\[(?!/?blok])|(?R))+)\#';

if (is_array($input)) {
$input = '<blockquote>'.$input[1].'</blockquote>';
}

return preg_replace_callback($regex, 'parseTagsRecursive', $input);
}


ovo je inace preradjeni primer iz php manuala, koji ja ovde kucam iz glave, nisam ga probao.. ali tako nesto bi trebalo..

EDIT: probao sam i radi :)

MorenoArdohain
21. 02. 2008., 03:53
Pogledaj ?R iz manuala, trebalo bi da radi.

EDIT: ivanhoe, brz si, nema sta :) inace, trebalo bi da moze i bez php-a, ali ce biti jako digacak regexp

bluesman
21. 02. 2008., 04:09
Taman sam hteo da pitam sta je ?R :) To sam prvo primetio u patternu.

I mislio sam da treba neka rekurzija, ali...