AlexBausW: Link extrahieren

Beitrag lesen

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