[ Draxyn @ 22.04.2008. 12:57 ] @
Pozdrav,

Pokusavam da uradim parsiranje jednostavnih bb kodova. Primer:

Code:

$patterns[] = "|\[b\](.*?)\[/b\]|s";
$replaces[] = "<strong>$1</strong>";
return nl2br(preg_replace($patterns, $replaces, $text));


Kao sto se moze videti ja tekst zatim obradim uz pomoc nl2br funkcije koja dodaje "br" tagove na mestima gde ide novi red.

Sve je u redu do tacke kada je potrebno parsirati "code" tag. Potrebno mi je da nl2br funkcija ne utice na taj tag nebi li mi kod osta ne-formatiran uz pomoc "pre" html tagova.

Kako ovo mogu da uradim.

Mucim se vec neko vreme, ali nista.
[ Nemanja Avramović @ 22.04.2008. 16:47 ] @
Pa recimo da izmeniš regex izraz tako da hvata i koji je bbkod u jednu promenljivu? A onda, ako je to code tag, onda ne koristiš nl2br...
[ Draxyn @ 22.04.2008. 18:20 ] @
Nazalost nije mi pomoglo.

U ovom trenutku znacilo bi mi i kako da "obradim" odredjeni string/karakter izmedju 2 taga. Makar da zamenim slovo x izmedju dva slova y
[ w3bl0rd @ 22.04.2008. 18:32 ] @
ma radi ručno... imaš for petlju ako se naleti na navedeni tag ili što pomoćnu varijablu7 stavi na 1 a ako je pomoćna varijabla na 1 ne mjenjaš \n sa <br /> ako je 0 mjenjaš...
[ Draxyn @ 22.04.2008. 19:07 ] @
Zelim da probam bas sa reg expr.

Evo da probam sa necim jako prostim. Izvinjavam se unapred, vise ni u sta nisam siguran :(

Code:
echo preg_replace('|<pre>[beli]</pre>|', 'crni', 'beli mrav i <pre> jedan beli slon </pre>');


Imamo dakle ovu recenicu gde bih zeleo da "beli" pored slona zamenim u "crni", dakle izmedju 2 "pre" taga.

Nadam se da je ovo sustina svega.
[ 357_97 @ 22.04.2008. 19:57 ] @
Sto se tice tvog poslednjeg primera ovo bi trebalo da zavrsi poso
Code:
echo preg_replace('/<pre>(.*?)beli(.*?)<\/pre>/si', '<pre>${1}CRNI${2}</pre>', 'beli mrav i <pre> jedan beli slon </pre>');
[ Draxyn @ 22.04.2008. 20:13 ] @
Hvala na odgovoru,

Nikad nisam bio blizi resenju. Problem mi je samo sto broj ovih reci "beli" izmedju tagova "pre" nije fiksno samo 1 vec ih moze biti vise (tj. to zavisi od korisnika).

Moze li se to resiti.
[ 357_97 @ 22.04.2008. 21:05 ] @
Moze i to. Nesto mi je stao mozak za resenje preko regularnog izraza (ipak nije to lako) ali moze ovako:
Code:

function myReplace($matches) {
    return str_replace('beli', 'CRNI', $matches[0]);
}
echo preg_replace_callback('/<pre>(.*?)beli(.*?)<\/pre>/si', 'myReplace', 'beli mrav i <pre> jedan beli slon i beli medved </pre>');


Pogledaj obavezno Regular Expressions od Oreilly-ja (postoji i dzepno izdanje) ako zelis da razumes regularne izraze.
[ Draxyn @ 22.04.2008. 21:38 ] @
Hvala ti najlepse proradilo je, ali imam jedan mali problem a vec polako gubim moc razmisljanja

Evo koda koji koristim:

Code:

<?php

$input = '
ovo
je primer
u
vise

redova

<pre>
var
    beli: Integer;
begin
    beli:= 10;
end;
</pre>';

function myReplace($matches) {
    return str_replace("beli", "crni", $matches[0]);
}
echo preg_replace_callback('/<pre>(.*?)beli(.*?)<\/pre>/im', 'myReplace', $input);

?>


Skoro je isti kao prethodni primer, ali je tekst u vise linija. Ok je to, postavio sam mu /im flag ali zasto opet ne radi, tj. ovaj pascal kod promenjivu beli nece opet da prebaci u crni.

Ako imas neku ideju sta sa ovim spasao si mi dan. Vec se od jutros mucim sa ovim, a zapeo sam da uradim preko regularnih izraza.

Pozdrav i hvala za sve
[ Draxyn @ 22.04.2008. 21:50 ] @
Ispravka.

Izgleda da ipak nisam trebao da brisem /si

Umoran sam vec od ovoga pa gresim malo :) Hvala jos jednom!