phpbar.de logo

Mailinglisten-Archive

[php] Suchen/Ersetzen Regulärer Ausdruck gesucht

[php] Suchen/Ersetzen Regulärer Ausdruck gesucht

Henning Jödden henning at wonderpixel.de
Die Feb 17 14:17:40 CET 2004


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