Link extrahieren
Alex
- perl
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
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:
$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;
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
Verdammt nochmal, wieso sind andere Leute immer schlauer als ich?! ;)))
Danke vielmals, sollte funktionieren :) *froi*