Siechfred: Erklärung zu einem regulären Ausdruck gesucht

Beitrag lesen

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