Alex: Link extrahieren

Link extrahieren

Hi erstmal,

Hier mein Problem:
Fuer eine Druckansicht waere es praktisch, wenn man die Links (also <a href="link">beschreibung</a>) irgendwie separat herausfiltern und in Klammern dahinterstellen koennte, da Papier nicht unbedingt Links versteht... ;)
Wie loese ich das am Besten?!

Also nochmal am Beispiel:

Ich habe das (in einem String mehrmals):

<a href="link">beschreibung</a>

und moechte das:

beschreibung (Link: link)

Falls es geht, sollte der Code noch eventuelle zusaetzliche Parameter im <a>-Tag beruecksichtigen, wie target="", etc.. Das heisst: Der Code soll auch das "verstehen" und konvertieren.

Ich waere fuer jede Idee dankbar!

-Alex

  1. Hallo Alex,

    Fuer eine Druckansicht waere es praktisch, wenn man die Links (also <a href="link">beschreibung</a>) irgendwie separat herausfiltern und in Klammern dahinterstellen koennte, da Papier nicht unbedingt Links versteht... ;)

    [...]

    Ich habe das (in einem String mehrmals):
    <a href="link">beschreibung</a>
    und moechte das:
    beschreibung (Link: link)

    Da man sich immer unter Namenskollegen helfen sollte ;-), hab` ich mich mal Deines Problems angenommen und folgendes entwickelt:

    in $content steht die HTML-Datei

    $content =~ s/
                   <a(.*?)        #beliebige zeichen vor href
                     href="(.*?)" #finde href und zugehörige url
                     (.*?)>       #restliche Attribute innerhalb von <a>
                     (.*?)        #Das ist der Linktext
                   </a>          #Ende des Links
                 /
                   $&.               #gefundener String (der alte Klumbatsch ;-)
                                     #Alternativ $4 falls Du nur den Linktext benötigst
                   " (Link: ".$2.    #Ausgabe der Link-url (2. Klammer)
                   &GetAttributes($1).     #übrige Attribute vor href filtern
                   &GetAttributes($3).")"  #Attribute nach href filtern
                 /seigx;

    Analysiert String nach auf Attribute und gibt Attribut-Wert-Paare zurück

    sub GetAttributes {
       my $in = shift;
       my $out = "";
       #Attribut und Werte finden und aneinanderhängen
       while ($in =~ /(\w+)=("')(.*?)\2/sig) {
          $out .= ", ".$1.": ".$3;
       }
       return $out;
    }

    Ich hoffe das ganze tut (tuttut ;-) was Du möchtest :-) Allerdings müssen die Werte der Attribute alle in Anführungszeichen stehen.

    Gruß AlexBausW

    1. Verdammt nochmal, wieso sind andere Leute immer schlauer als ich?! ;)))

      Danke vielmals, sollte funktionieren :) *froi*