Reguläre Ausdrücke: Ausschluss einer Zeichenkette in Unterausdruck

27apricot

Erfahrenes Mitglied
Hallo,

Ich hab' folgende reguläre Ausdrücke zur Ersetzung von FETT/KURSIV/LINK-BB-Code gebastelt:

PHP:
$suchen = array(
	'~\[ f](.+)\[ /f\]~',
	'~\[ k](.+)\[ /k\]~',
	'~\[ link ziel=(.*) titel=(.*)\](.*)\[ /link\]~',
);
$ersetzen = array(
	'<strong>\1</strong>',
	'<em>\1</em>',
	'<a href="\1" title="\2">\3</a>',
);
return preg_replace($suchen, $ersetzen, $text);

Gibt es in $text nun aber mehrere der jeweiligen Auszeichnungen, ersetzt preg_replace() alles zwischen dem ersten öffnenden Tag und dem letzten schließenden.

Beispiel:
Code:
[ f]fett[ /f] schlank [ f]fett[ /f] schlank [ f]fett[ /f]
ergibt [ f]fett[ /f] schlank [ f]fett[ /f] schlank [ f]fett[ /f]
Wie kann ich innerhalb der Unterausdrücke in runden Klammern die Tags als ganzes ausschließen? Also innerhalb von (.*) z.B. [/link] ausschließen? Wäre das überhaupt der richtige Weg oder würde dann gar nix mehr ersetzt, da das, was ich ausschließen will, ja zwischen dem ersten und dem letzten Tag vorkommt?

Vielen Dank schonmal im Voraus
27apricot
 
Zurück