Mailinglisten-Archive |
Tach Lars, Lars Kroll wrote: > Ich möchte in einem String $text alle Begriffe $begriff durch $ersetzung ersetzen lassen. > Bis auf die Begriffe, welche in Image-Tags (<img...$begriff...>) eingeschlossen sind. > Habe verschiedenes mit preg_replace () versucht. Hat aber alles nix geholfen. Ich habe bis heute keinen praktikablen Weg gefunden eine komplette, feste Zeichenkette auszuschliessen. Einzelne Zeichen sind kein Problem, ganze Zeichenklassen auch nicht aber eine Zeichenfolge innerhalb einer anderen Zeichenfolge zu negieren ist mir selbst nach zweifachem Durchlesen von Jeffrey Friedl's RegEx Bibel nicht gelungen. Ich könnte dir höchstens eine etwas umständliche Lösung anbieten: // zuerst alle <img ... > Tags in $text raussuchen if (preg_match_all('/<img([^>]*)+>/u',$text,$matches,PREG_SET_ORDER) { foreach ($matches AS $key=>$match) { // eine eigene Zeichenkette bauen, die man wiederfinden kann $replace = "##REPLACE_".$key."##"; // und den gefundenen <img> Tag dadurch ersetzen $text = str_replace($match[0],$replace,$text); } // im übriggebliebenen Text $begriff durch $ersetzung ersetzen $text = str_replace($begriff,$ersetzung,$text); // nachdem die ersetzung fertig ist werden die vorher gefundenen und // !unbehandelten! <img> Tags wieder in den Text eingesetzt foreach ($matches AS $key=>$match) { $text = str_replace("##REPLACE_".$key."##",$match[0],$text); } } Es ist wie gesagt etwas umständlich, ist (bis auf die RegEx) ungetestet und je nachdem wieviele <img> Tags du hast vielleicht etwas langsam, aber wenn sich jemand findet, der mir zeigt wie man Zeichenketten in Zeichenketten negiert lebe er hoch. ;-) <rauskitzel> Wahrscheinlich kann man damit aber eher auf einer Perl Liste rechnen hehe... </rauskitzel> grüße henning
php::bar PHP Wiki - Listenarchive