[ Stranger2 @ 06.11.2010. 10:39 ] @
Nikako mi ne uspava da napravim odgovarajuci regullar expression kod koji ce da u html kodu pronalazi tag
Code:
<!--reklama-->


Treba mi to za filter sadrzaja koji koji ubacujem u Drupal CMS. Zelim da u svim sadrzajima samo stavim HTML komentar gde hocu da stoji benner a da filter sam to zamenjuje sa aktuelnim kodom banera. Medjutim uvek mi izbaci gresku ili detektuje ceo sadrzaj polja za sadrzaj stranice.???
[ Nikola Poša @ 06.11.2010. 11:31 ] @
A jel taj string "reklama" fiksan, ili on može da ima neku vrednost na osnovu koje imaš neku dodatnu logiku, npr. reklama1, reklama-nekisajt? Ako treba da pronađeš baš taj string, tu onda nema potrebe za regularnim izrazima, već je dovoljna samo direktna zamena za neki drugi string.
Code:
$tekst = str_replace('<!--reklama-->', 'ovde ide kôd banera', $tekst);

btw Možda je pametnije da ti custom tag-ovi koje hoćeš da filtriraš budu u formi [reklama], jer tako možeš npr. da dozvoliš i neke dodatne opcije, npr. [reklama tip=velika], pa da to onda match-uješ nekim ovakvim pattern-om: /\[reklama(?:\s+tip\=(.+))?\]/.
[ Stranger2 @ 06.11.2010. 15:38 ] @
Hvala!

Treba mi fiksan string "reklama" i to bi bilo za default reklame i da taj sadrzaj ne moram da menjam bez obzira u koji cms da ga prebacim.

A eventualno bi kasnije posebno dodao tip "reklama2" i "reklama3" za posebne nove vrste reklama. Ali to mi nece sada trebati.

Citat:
Možda je pametnije da ti custom tag-ovi koje hoćeš da filtriraš budu u formi [reklama]

Hteo bih da to resenje bude neovisno o CMS sistemu koji koristim. HTML komentar mi se cini kao najbolje resenje . A ukoliko taj sadrzaj bude prikazan kao obican HTML bez filtriranja onda ga citaoci nece ni videti. Resenje sa html komentarom <!--reklama--> je idealno da taj sadrzaj vise nikada ne moram da editujem.

Takodje mogu ja kasnije ubaciti jos jedan "medjufilter" koji ce obaviti konverziju <!--reklama--> u [reklama] ali svakako mi treba detekciija za "<!--reklama-->" pre svega.

---

Code:
$tekst = str_replace('<!--reklama-->', 'ovde ide kôd banera', $tekst);

ovako u drupalu imam opciju za kreiranje custom filtera. U jedno polje unosim regular expression a u drugo polje unosim zemenski tekst. Pokusao sam sa

ovako
Code:
<!--reklama-->


, ovako
Code:
'<!--reklama-->'


i ovako
Code:
/<!--reklama-->/


I svaki put prijavljuje gresku. Nemam ideju sta sam pogresio. ??? imam i knjigu o regular expressions ali nema takav primer i nema nista specificno objasnjeno za htnml.

Evo kako izgleda forma za kreiranje custom filtra:



da li imate ideju sta bi trebalo da ukucam?
[ Stranger2 @ 06.11.2010. 15:58 ] @
evo uspeo sam sada na osnovu onog vaseg preloga da detektujem [reklama] tag
Upotrebio sam:
Code:
/\[reklama\]/


Ono sa html-om ne mogu i dalje.

Da li mozda treba nesto poput
Code:
/\<!--reklama-->/
ili sl. ne znam da li znakovi <>! imaju specijalno znacenje u regular expressions...???
[ Nikola Poša @ 06.11.2010. 17:11 ] @
Pa u tom stringu <!--reklama--> ima nekoliko meta karaktera, tj. onih koji se tretiraju na poseban način od strane PCRE-a. Ako u svom pattern-u hoćeš da match-uješ baš neke od tih karaketra, moraš da ih escape-uješ, pa bi u tom slučaju tvoj pattern izgledao ovako: /<!\-\-reklama\-\->/.

edit: Jedino što ne znam da li u toj formi Drupal zahteva da pattern bude uokviren delimiter-ima (kosim crtama na početku i na kraju pattern-a u mom primeru).
[ Stranger2 @ 07.11.2010. 09:48 ] @
Hvala!
Citat:
Ako u svom pattern-u hoćeš da match-uješ baš neke od tih karaketra, moraš da ih escape-uješ, pa bi u tom slučaju tvoj pattern izgledao ovako: /<!\-\-reklama\-\->/.
Nesto mi je uspelo slicno ovom predlogu. Reci mi da li moze biti stete ako ispred svakog znaka stavim "\" bez obzira koji su metacharacteri a koji nisu?

Citat:
Jedino što ne znam da li u toj formi Drupal zahteva da pattern bude uokviren delimiter-ima (kosim crtama na početku i na kraju pattern-a u mom primeru).


Ja mislim da zahteva jer neke filtre koje sam ranije koristio su imali / na pocetku i na kraju. A u ovom slucaju o kojem pricam u ovoj temi mi je izmedju ostalog izbacivao i gresku
Code:
bla bla ...unknown delimeters ' ' ...


Uopste nisam shvatio koje je svrha tih delimeters? Pise samo sta mogu biti i da trebaju u nekim funkcijama ali ne razumem logiku toga? Da li moze sa par reci da mi to pojasnis malo, da izbegnem neke greske u buduce.




[ Nikola Poša @ 07.11.2010. 13:48 ] @
Citat:
Stranger2:Reci mi da li moze biti stete ako ispred svakog znaka stavim "\" bez obzira koji su metacharacteri a koji nisu?

Možeš slobodno da staviš i ispred onih koji nisu meta-karakteri. Npr. ako ga staviš ispred znaka ">", PCRE će i dalje na taj znak da gleda isto, bez obzira što si ga bespotrebno escape-ovao.

Citat:
Stranger2: Uopste nisam shvatio koje je svrha tih delimeters? Pise samo sta mogu biti i da trebaju u nekim funkcijama ali ne razumem logiku toga? Da li moze sa par reci da mi to pojasnis malo, da izbegnem neke greske u buduce.

Jel ti uopšte znaš na šta sam ja mislio kad sam spomenuo delimiter-e? Pogledaj šta o njima piše u manual-u, možda će ti onda biti jasnije. Svaki PCRE pattern mora da bude uokviren delimiter-ima, a karakteri koji se najčešće koriste u te svrhe su kosa crta (/), taraba (#) i uspravna crta (|). E sad ako npr. kao delimiter koristiš kosu crtu, a negde unutar tvog patterna-a moraš da match-uješ baš taj karakter, rešenje je ili da promeniš delimiter ili da escape-uješ tu kosu crtu u pattern-u.
[ Stranger2 @ 07.11.2010. 15:16 ] @
hvala!

Citat:
Jel ti uopšte znaš na šta sam ja mislio kad sam spomenuo delimiter-e? Pogledaj šta o njima piše u manual-u, možda će ti onda biti jasnije. Svaki PCRE pattern mora da bude uokviren delimiter-ima, a karakteri koji se najčešće koriste u te svrhe su kosa crta (/), taraba (#) i uspravna crta (|). E sad ako npr. kao delimiter koristiš kosu crtu, a negde unutar tvog patterna-a moraš da match-uješ baš taj karakter, rešenje je ili da promeniš delimiter ili da escape-uješ tu kosu crtu u pattern-u.


Znam sta su delimeteri u smislu sto znam na pamet tu definiciju, ali nisam shvatao poentu i u primerima koje sam gledao negde ih ima a negde nema... Pretpostavljam da je najbolje da uvek koristim "/" na pocetku i na kraju i da ne pitam.