Beste Tweakers,
Ik ben bezig met een template engine (en kom aub niet met "waarom wil je het wiel opnieuw uitvinden" want hier heb ik mijn redenen voor)
Het gaat om het volgende stukje tekst wat ik gebruik om mijn regexp te testen:
Ik wil nu dus de hele tekst door een regexp gooien zodat die de tag + eind tag + de inhoud van de tag "grept"
Nu heb ik de volgende regexp:
De code van de handle functie:
Nu werkt het op zich wel maar het probleem is dat de regexp niet de goede eindtag erbij pakt als ik meerdere van dezelfde tags gebruik.
Dit is wat ik terug krijg bij een echo op $text:
Ik hoop dat er hier mensen zijn die mij een beetje op weg kunnen helpen want ik begrijp echt niets meer van regexp.
Ik ben bezig met een template engine (en kom aub niet met "waarom wil je het wiel opnieuw uitvinden" want hier heb ik mijn redenen voor)
Het gaat om het volgende stukje tekst wat ik gebruik om mijn regexp te testen:
code:
1
2
3
4
5
6
7
8
9
10
| {foreach id="$varaible" value="$data"} {if exp="blaat"} {if exp="blabla"} show something {/if} {if exp="blabla"} show something {/if} {/if} {/foreach} |
Ik wil nu dus de hele tekst door een regexp gooien zodat die de tag + eind tag + de inhoud van de tag "grept"
Nu heb ik de volgende regexp:
PHP:
1
| $text = preg_replace_callback("#\{(\S*)\s(.*?)\}(.*?)\{\/\\1\}#si", "handle", $text); |
De code van de handle functie:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <?php function handle($matches) { global $ifs, $fors; $tag = $matches[1]; $innerData = $matches[3]; switch($tag) { case 'foreach': $fors++; return "<?php foreach(blaat): // start foreach {$fors} ?>". $innerData ."<?php endforeach; // end foreach {$fors} ?>"; break; case 'if': $ifs++; return "<?php if(blaat): // start if {$ifs} ?>". $innerData ."<?php endif; // end if {$ifs} ?>"; break; } } ?> |
Nu werkt het op zich wel maar het probleem is dat de regexp niet de goede eindtag erbij pakt als ik meerdere van dezelfde tags gebruik.
Dit is wat ik terug krijg bij een echo op $text:
PHP:
1
2
3
4
5
6
7
8
9
10
| <?php foreach(blaat): // start foreach 1 ?> <?php if(blaat): // start if 1 ?> <?php if(blaat): // start if 3 ?> show something <?php endif; // end if 1 ?> <?php if(blaat): // start if 2 ?> show something <?php endif; // end if 2 ?> <?php endif; // end if 3 ?> <?php endforeach; // end foreach 1 ?> |
Ik hoop dat er hier mensen zijn die mij een beetje op weg kunnen helpen want ik begrijp echt niets meer van regexp.
[ Voor 10% gewijzigd door chuxiej op 10-11-2005 14:51 ]
www.dannyhiemstra.nl