agapanthus: Regulärer Ausdruck gesucht

Moin.

Ich habe einen Sring (hier im Beispiel ein ganz kurzer, in Wirklichkeit ists eine ganze HTML-Seite in einer Zeile):

$content = '<img src="images/pic01.jpg">';

Jetzt soll die URL des Bildes ergänzt werden um http://www.domain.de, das funktioniert mit den nächsten Zeilen:

$url = "http://www.domain.de/";
$content =~ s/src*=*"/src="$url/sg;

Soweit geht es gut. Jetzt die Ausnahne: wenn der String an der Stelle bereits die komplette URL ('<img src="http://www.domain.de/images/pic01.jpg">') enthält, dann soll nicht ersetzt werden. Wie muß der reguläre Ausdruck ergänzt werden, um diesen Fall auszuschließen? Das ^ kann bei Zeichenklassen zur Verneinung genutzt werden. Damit geht folgendes:

$content =~ s/src*=*"([^htp])/src="$url$1/sg;

Nachteil: Strings, die nach dem "src =" ein h oder t oder p haben, werden auch nicht angefasst: '<img src="high/images/pic01.jpg">' Außerdem muß die Zeichenklasse geklammert werden und am Ende mit $1 dieses Zeichen wieder eingefügt werden.

Ideen sind herzlich willkommen...

Danke, Gruß Frank

  1. 你好 agapanthus,

    Soweit geht es gut. Jetzt die Ausnahne: wenn der String an der Stelle
    bereits die komplette URL ('<img src="http://www.domain.de/images/pic01.jpg">')
    enthält, dann soll nicht ersetzt werden. Wie muß der reguläre Ausdruck
    ergänzt werden, um diesen Fall auszuschließen?

    Am besten waere es, er saehe ungefaehr so aus:

    s~src *= *"(?!http://www.domain.de/)~src="$url~g;

    再见,
     CK

    --
    lim(3->4)(sqrt(3)) = 2
    http://wwwtech.de/
    1. Hallo Christian!

      Am besten waere es, er saehe ungefaehr so aus:

      s~src *= *"(?!http://www.domain.de/)~src="$url~g;

      Genial! Es geht so (nach kleiner Anpassung, denn http:// reicht, es können nämlich verschiedene domains vorkommen)!
      $content =~ s/src *= *"(?!http:)/src="$url/g;

      Vielen Dank für die schnelle Antwort!
      Gruß Frank