preg_replace inmitten von Klammern

ShooterMS

Mitglied
Da ich es nicht hinbekomme suche ich nun hier Rat:

Ich habe einen String mit folgendem Aufbau:

AAA { text1 }; BBB { textlänger2 }; CCC { nochlängertext3 };


Mit der preg_replace-Funktion möchte ich den Teilstring "textlänger2" aus dem Teilstück BBB mit einem anderen String ersetzen. Ich schaffe es aber nicht, dass er an der geschweiften Klammer 2 aufhört mit ersetzen. Ich weiß die Länge von dem zu ersetztenden Textstück nicht.

preg_replace("/(BBB {)(.*)(})/si","$1 ersatztext $3", $base_inhalt);

rauskommen soll : AAA { text1 }; BBB { ersatztext }; CCC { nochlängertext3 };

Was muss ich berichtigen? - weil so wird alles ab BBB erstetzt und CCC verschwindet.

Danke
 
Reguläre Ausdrücke a'la PCRE sind von Hause aus "gierig"....finden also soviel wie möglich.
Daher wird nicht alles bis zur nächsten schliessenden geschweiften Klammer ersetzt, sondern alles bis zur letzten geschweiften Klammer.
Mit der Option U(Ungreedy) machst du den Ausdruck "genügsam"...er hört dann bei der nächsten geschweiften Klammer auf.

Code:
preg_replace("/(BBB {)(.*)(})/siU","$1 ersatztext $3", $base_inhalt);
 
noch eine zweite Frage dazu:

Wie extrahiere ich aus dem String
AAA { text1 }; BBB { textlänger2 }; CCC { nochlängertext3 };

nur den Teil "textlänger2" in eine Variable?

Ich kann nur nach BBB suchen, da ich AAA und CCC nicht kenne (aus Variablensicht)

Danke
 
Zurück