ich habe eine verschachtelte Konstruktion in der Art:
$string = '{{ Foo foo1={1} foo2= {{ Bar bar= {{ Baz baz=3 }} {{
Faz }} }} }}';
aus der ich gern folgendes machen w�rde:
<Foo>
<foo1>{1}</foo1>
<foo2>
<Bar>
<bar>
<Baz>
<baz>3</baz>
</Baz>
<Faz>
</Faz>
</bar>
</Bar>
</foo2>
</Foo>
bisher gehe ich daf�r folgender Ma�en vor:
1. ich �ndere alle {{ in ( und alle }} in ) (der Grund daf�r kommt sp�ter):
$string = str_replace(array('{{', '}}'), array('(',')'), $string);
2. ich benutze rekursives Pattern-Matching um korrespondierende Klammern zu
finden
$pattern = '#\( (?: [^()]|(?R) )* \)#xs';
preg_match_all($pattern, $string, $matches);
damit bekomme ich s�mtliche Klammerpaare auch auf einer Ebene und iteriere
�ber diese und baue so Schritt f�r Schritt �ber jede Rekursionstiefe die
entsprechende Struktur auf. Funktionieren tut es jedenfalls.
Ich f�nd es allerdings deutlich angenehmer, wenn man Schritt 1 weglassen
k�nnte. Was allerdings das Problem aufwirft, wie man [^{{}}] erreichen
k�nnte, denn das entspricht ja leider [^{}], was mir aber nicht hilft. Ich
brauche also eine Negation einer Zeichenkette. Ist das �berhaupt machbar?
Noch besser f�nd ich eine L�sung mir preg_replace(_callback) - aber da habe
ich absolut keine Ahnung, wie das gelingen k�nnte, alle meine Versuche waren
vergeblich.
Ich habs auch mit (?1) versucht, dabei werden aber s�mtliche
Zwischenschritte verworfen und man bekommt dann lediglich {{ Faz }}.
F�r hilfreiche Tipps oder einen g�nzlich anderen Ansatz w�r ich euch
dankbar.
Johannes
--
Emails ohne "[nospam]" im Betreff werden kommentarlos gel�scht.