Jippie, ich hab das Problem selbst gelöst. Aber ein kleines Problem bleibt noch. Ich mach es jetzt so:
preg_match_all ("/(?!.*{START (.+)}.*){(?!START |END )(.+)}(?!.*{END \1}.*)/Us", $template, $vars);
So in etwa das Template:
<body>
{varibale0}
{START bereich1}
{varibale1}
<b>{varibale2}</b>
{START bereich2}
{varibale3}
{END bereich2}
{START bereich3}
{varibale4}
{END bereich3}
{END bereich1}
</body>
Jetzt kommt in etwa das raus:
Array
(
[bereich1] => Array
(
[bereich2] => Array
(
[0] => variable3
)
[bereich3] => Array
(
[0] => variable4
)
[0] => variable1
[1] => variable2
[2] => variable4
)
)
Sprich, den ersten "Unterbereich" macht er richtig, aber bei den folgenden werden die variablen wieder durchgeschleift. Außerdem werden die Variablen, welche sich in keinem Bereich befinden auch nicht eingelesen!