Tag.
$string = preg_replace("/((<[^>]*)|$s)/ie", '"$2"=="$1"? "$1":"$t"', $string);
ersetzt ausserhalb von spitzen Klammern alle $s durch $t.
Tricky :-)
Aber ich würde gerne verstehen, wie genau dieser Ausdruck das macht.
Dann nimm ihn mal auseinander, dann wird's vielleicht deutlicher:
$1 Anfang: (
$2 Anfang: (
Variante 1: <[^>]*
$2 Ende: )
oder |
Variante 2: $s
$1 Ende: )
Modifier: ie
Fangen wir also von vorn an:
Der gesamte Treffer steht in $1, die spitze Klammer (kein oder mehrmals) in $2. Der i-Modifier ist sicher klar, interessant ist der e-Modifier, der bewirkt, dass der Ausdruck wie eine PHP-Anweisung ausgewertet wird (siehe Modifier /e). Somit wird nicht nach dem String "$s" gesucht, sondern nach dem Inhalt, welcher der Variable $s zugewiesen wurde. Der Ersatztext ist eine einfache PHP-Anweisung:
$2 == $1 ? $1 : $t
*1 *2
Ein einfaches "entweder-oder". Zunächst wird geschaut, ob der Treffer ($1) nur aus einem "Spitzklammerausdruck" ($2) besteht, falls ja, lässt der Ausdruck alles so, wie es ist (*1), anderenfalls ersetzt er den Treffer durch den Inhalt der Variablen $t (*2).
So, ich habe versucht, das Ganze populärwissenschaftlich aufzudröseln, akademische und sonstige Fehler mögen bitte die dazu Berufenen korrigieren :-)
Siechfred