Andü: Negierter Sring in Regulärem Ausdruck

Beitrag lesen

Hallo.

Ich habe für ein Projekt eine Template-Engine geschrieben. Die Templates sehen in etwa so aus...

<body>
{varibale0}
{START bereich1}
{varibale1}
<b>{varibale2}</b>
{END bereich1}
</body>

Jetzt möchte ich die Bereiche und Variablen in einen Array einlesen, wobei jede Variable untergeordnet zu ihrem Bereich ist (wird rekursiv gemacht). In etwa so:

Array
(
  [bereich1] => Array
  (
    [0] => variable1
    [1] => variable2
  )
  [0] => variable0
)

Die Bereiche lese ich so aus, das funktioniert auch:

preg_match_all ("/{START (.+)}(.*){END \1}/Us", $template, $areas, PREG_SET_ORDER);

Jetzt will ich aber eben noch zu dem Bereich die entsprechenden Variablen. Da ist das Porblem, weil der immer alle Variablen einliest. Ich hab es so versucht, funktionierte aber nicht:

preg_match_all ("/({?!START (.+)}.*){(?!START |END )(.+)}(?!.*{END \1})/Us", $template, $vars);

Da entsteht in etwa sowas:

Array
(
  [bereich1] => Array
  (
  )
)

Hat jemand die Lösung für dieses Problem?

Gruß, Andü