DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Regular expression i htaccess (http://www.devprotalk.com/forumdisplay.php?f=41)
-   -   PHP: Kada parser da "stane" (http://www.devprotalk.com/showthread.php?t=11839)

Bojsi 16. 07. 2014. 23:44

PHP: Kada parser da "stane"
 
Pozdrav,

Imam jedan nadam se trivijalan problem. Izvinjavam se sto nisam mogao da smislim bolji naslov :(

Potrebno mi je da prodjem kroz sledeci string (uz pomoc PHP-a) i izdvojim kompletan tag:

Kôd:

<php:page>
    <php:button>Test</php:button>
</php:page>

Odmah mi je na pamet palo sledece resenje:

Kôd:

$patterns[] = "|\<php:(.*?)\>(.*?)\</php:(.*?)\>|e";               
$replaces[] = "\$this->createControl(\"$1\", \"$2\");";

return preg_replace($patterns, $replaces, $data);

Naravno, ono ne radi jer ce izvuci <php:page> a zavrsiti sa </php:button>

Da li mogu nekako da "fiksiram" drugu polovinu izraza (zatvaranje taga), da $3 mora da bude jednak $1 da bi stao sa parsiranjem, tako da stane tek kada opet naidje na </php:page>.

Mozda mogu da drugacije uradim i "izvucem" posebno button, page itd. ali se nadam da moze bolje (a i da naucim za kasnije).

Nadam se da sam dobro objasnio,

Hvala

Br@nkoR 16. 07. 2014. 23:57

http://php.net/manual/en/regexp.refe...references.php
http://www.regular-expressions.info/backref.html

Bojsi 17. 07. 2014. 00:59

Hvala druze. Sad razumem koncept. Iz nekog razloga moj kod nece da radi ako prosto stavim:

Kôd:

$patterns[] = "|\<php:(.*?)\>(.*?)\</php:\1\>|e";
ali sada bar znam sta da trazim.

Bojsi 17. 07. 2014. 04:45

Nesto ne ide. Ne znam gde gresim, nista mi izraz ne nalazi. Mozda neko zna gde gresim. Vec je kasno pa se nadam da nisam zaboravio i ono sto sam znao.

PHP kôd:

$s '<php:page><php:button>Test</php:button></php:page>';

$patterns[] = "|\<php:(.*?)\>(.*?)\</php:\1\>|s";        
$replaces[] = "X";

echo 
preg_replace($patterns$replaces$s); 


Br@nkoR 17. 07. 2014. 09:47

PHP kôd:

$patterns[] = "|\<php:(.*?)\>(.*?)\</php:\\1\>|s"

ili
PHP kôd:

$patterns[] = '|\<php:(.*?)\>(.*?)\</php:\1\>|s'

ili
PHP kôd:

$patterns[] = "|\<php:(.*?)\>(.*?)\</php:\g1\>|s"

\1 unutar navodnika (") postaje 1

Bojsi 17. 07. 2014. 14:28

Hvala, to je to. Nikad ne bih provalio.

Hvala jos jednom.

Bojsi 22. 09. 2014. 07:18

Potrebna mi je jos jedna pomoc ako moze, problem se nadovezuje:

Pravim neki mini template sistem (za sopstvene potrebe) gde imam tagove u stilu:

Kôd:

<php:ime_kontrole>...</php:ime_kontrole>
Kada se procita ovo ime_kontrole, ja izrenderujem tu kontrolu i onda dalje obradjujem njene child kontrole.

Unutar tagova za kontrolu, mogu se nalaziti i tagovi za svojstva (property).

Ceo primer:

Kôd:

<property name="title">Ovo je pravi naslov</property>
<php:button>
    <property name="title">Ovo je pogresan naslov</property>
    <property name="styleClass">test</property>
</php:button>

Kao sto vidite, imam jednu ugnjezdenu kontrolu (button) i ona opet ima svoje propertije.

I koristim sledeci (PHP) kod da obradim propertije:

PHP kôd:

$patterns[] = "|\<property name=\"(.*?)\"\>(.*?)\</property\>|e";        
$replaces[] = "\$this->setProperty($1, \"$2\");";        

$value preg_replace($patterns$replaces$value); 

Medjutim, ovde opet nastaje problem jer ce mi obrada "pokupiti" i propertije unutar button kontrole, sto je nepozeljno. Dakle, zelim da parser ne "zalazi" u <php:ime_kontrole> tagove (bilo kog nivoa).

Verovatno treba da iskljucim grupu koju koristim za "citanje" tagova za kontrole:

Kôd:

"|\<php:(.*?)\>(.*?)\</php:\\1\>|e";
ali ne znam gde to da postavim?

Hvala jos jednom.


Vreme je GMT +2. Trenutno vreme je 06:40.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.