ChrisB: Assoziative Arrays in preg_replace

Beitrag lesen

Hi,

$lang= array("house"=>"Haus", "garden"=>"Garten");

$text = "Das [lang=house] mit [lang=garden]";

$text = preg_replace('#[lang=(.*)]#Uis', $lang['\1'], $text);

echo $text;


>   
> Das Ergebnis ist "Das mit", d.h. alles was dem Muster entspricht verschwindet ansttat ersetzt zu werden. Ich habe schon mir alle erdenklichen Möglichkeiten ausprobiert von '$lang[\1]', "$lang[\1]" bis "$lang['\1'] etc.. Am ehesten richtig scheint "$lang[\1]" als Replace zu sein, da wenn ich z.B. statisch "$lang[garden]" es richtig ersetzt wird (aber halt natürlich  mit dem Ergebnis "Das Garten mit Garten").  
  
Das funktioniert dann aus dem einfachen Grund, dass der String bereits ausgewertet wurde, \*bevor\* das Ersetzen stattfindet.  
"$lang[garden]" lässt sich bereits "im Voraus" auswerten - $lang['garden'] wäre natürlich die "korrekteste" Schreibweise.  
  
Aber die Back Reference dort einsetzen zu wollen, bringt nichts, kann nichts bringen - weil die zu dem Zeitpunkt, wo der String geparst wird, noch gar nicht existiert.  
  

> Kennt da jemand die Lösung?  
  
Beschäftige dich damit, wie man eine Callback-Funktion an der Stelle aufruft, die das zu ersetzende als Parameter nimmt, und den Ersatz zurückgibt.  
  
MfG ChrisB  
  

-- 
Light travels faster than sound - that's why most people appear bright until you hear them speak.