Ich muss jede Instanz eines Textes in eckigen Klammern durch etwas anderes ersetzen, wobei jeder eckige Klammerblock separat behandelt wird. Beginnen Sie beispielsweise mit:
Code: Select all
[quote author=joe link=topic=765.msg4476#msg4476 date=1330380346] This is the quoted text [/quote] This is the new post
wird umgewandelt in:
Code: Select all
** This is the quoted text ** This is the new post
Ich habe Folgendes versucht:
Code: Select all
preg_replace('/\[.*\]/', '**', $msgtext);
Was ich bekomme ist:
Es scheint vom ersten „[“-Zeichen bis zum letzten „]“-Zeichen in der gesamten Zeichenfolge übereinzustimmen, auch wenn der größere Text eine Reihe separater Blöcke mit eckigen Klammern enthält. Wie ändere ich meine Regex, um jeden Block zwischen den eckigen Klammern einzeln zu ersetzen? Offensichtlich stimmt mein .* in der Regex mit allem überein, einschließlich der rechten Klammern bis zur letzten, aber ich möchte, dass es bei der ersten rechten Klammer stoppt, auf die es trifft, und diese Logik dann im gesamten String wiederholt.