Dennis: und XML

Beitrag lesen

Hi Andü,

ereg_replace (("({[)(/)*(.+)(]})","<\3>",$array)
Das hat zur Folge, dass vom ersten bis zum letzten {[br]} alles ersetzt wird. Ich bräuchte sozusagen noch die Negierung, dass nicht ]} auch innerhalb der Klammern steht...

Dieses Verhalten ist klar, da Reguläre Ausdrücke standardmäßig "gefräßig" sind, und also so viel matchen, wir irgendwie möglich.

Ohne die Backslashes zum Escapen, sieht das oben so aus: ({[)(/)*(.+)(]})
Da kannst du dir die ganzen Runden Klammern ersparen:    {[/*.+]}
Außerdem ist das * unpraktisch, dafür ist ? geeignet:    {[/?.+]}

Das ? steht für 0 oder 1 mal.

Das eigentliche Problem liegt aber in dem + begraben - wenn du eine PCRE-Standard Funktion verwenden würdest (also die preg_* Funktionen), dann könntest du den Modifier U (steht für ungreedy) anhängen.

Es sollte aber auch möglich sein, hinter das + noch mal ein ? zu schreiben, damit nimmst du diesem + die "Gefräßigkeit". So sollte es also gehen:

{[/?.+?]}

Natürlich jetzt noch wieder alles schön escapen ;-)

MfG, Dennis.

--
Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
Das Leben ist kein Warenhaus - es nimmt nichts zurück. (Anette Louisan)