xxxMaster: Probleme mit Zeichenkette bei preg_replace

Hallöchen!
Das ist mein Preg_replace code

  
$description = preg_replace('|<img(.*) src="/images/(.*)"(.*)>|i', '|<img src="http://www.website.de/images/(.*)">|i', $description);  

Ich möchte damit bewirken, dass z.B. aus

  
<img class="..." id="..." src="images/hello.png" width="..." height="..." ... />  

Ungefähr sowas wird:

  
<img src="http://www.website.de/images/hello.png">  

Nur leider kauft der Gute mir die zweite Zeichenkette nicht ab - wieso nicht? Dabei dachte ich, preg_replace wär' gerade für Zeichenketten...

Kann mir da jemand ein bisschen helfen, oder hab' ich da vielleicht einen Fehler???

  1. Hallo,

    Nur leider kauft der Gute mir die zweite Zeichenkette nicht ab - wieso nicht? Dabei dachte ich, preg_replace wär' gerade für Zeichenketten...

    Versuche es doch im zweiten Teil mal ohne die "|" und das "i". Dann ersetzt du noch (.*) durch $2 und es müsste klappen.

    Die () im 1. Teil sorgen dafür, dass nummerierte Variablen erzeigt werden, die du dann im zweiten Teil nutzten kannst...

    Hoffe das hiflt dir.

    Gruß
    Alex

  2. Hi,

    $description = preg_replace('|<img(.*) src="/images/(.*)"(.*)>|i', '|<img src="http://www.website.de/images/(.*)">|i', $description);

    ich weiss nicht genau ob das Dein Problem löst aber teste doch mal:
    $reg = "#<img[^>]+src="/?images/(.+?)"#i";
    <img gefolgt von allen Zeichen ausser > gefolgt von src="/images/ gefolgt von allen Zeichen bis zum nächsten Auftreten von '"' (in der Klammer). Bin jetzt nicht sicher, ob ich das Maskieren übertrieben habe, habe grade keine Zeit zum Testen. Hochstrich als Delimiter halte ich für ungünstig, wegen der oder-Funktionalität ist das nicht sehr übersichtlich. Wie gesagt, ungetestet...

    Gruesse, Joachim

    --
    Am Ende wird alles gut.
  3. $description = preg_replace('|<img(.) src="/images/(.)"(.)>|i', '|<img src="http://www.website.de/images/(.)">|i', $description);

      
    
    > Nur leider kauft der Gute mir die zweite Zeichenkette nicht ab - wieso nicht?  
      
    Warum sollte preg\_replace() irgendwas kaufen. Ersetzen tut's.  
      
    (Falls es nicht ersetzt, wäre es überaus sinnig, das auch so zu schreiben, und zwar mitsamt einer Beschreibung, was es denn stattdessen tut. "Nicht abkaufen" ist als Beschreibung so schlau wie "draußen ist es hell" als Wetterbericht.)  
      
    
    > Kann mir da jemand ein bisschen helfen, oder hab' ich da vielleicht einen Fehler???  
      
    Falsch ist die Verwendung von .\*, das greift sich nämlich alles, was es kriegen kann. Aus zwei <img>-Elementen würde der eines machen, vom <img des ersten bis zum > des zweiten Elements. Benutze beispielweise [^>]\* (oder [^"]\* für die Attribut-Daten).  
      
    Falsch ist weiterhin, im zweiten Argument, der einzusetzenden Zeichenkette, .\* zu verwenden, sofern du da etwas eingesetzt haben möchtest. Verwende $1 bis $9 für den Inhalt der jeweiligen Klammer aus dem Muster.  
      
    Vielleicht liest du dir besser erstmal Anleitung zur Funktion durch: <http://de.php.net/manual/de/function.preg-replace.php>.