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.