Wie finde ich URIs in einem Text?
Inhalt:
Für diese Aufgabe gibt es mehrere Lösungen: Man benutzt einen Regulären Ausdruck - aber das
wird durch die Komplexität von URIs relativ schwierig (Subdomains, verschiedene Protokolle,...),
oder man verwendet ein Modul. Die Lösungen mit Modulen sind die saubersten und auch sicher,
dass man (fast) alle findet. Die Module sind vielfach getestet!
Lösung 1: URI::Find
Skript:
#!/usr/bin/perl
use strict;
use warnings;
use URI::Find;
my $string = q~Dies ist ein http://test.de Test
und noch eine http://perlseiten.renee-baecker.de URL. Da dies
ein laengerer Text ist, sind auch noch welche
zu finden: http://board.perl-community.de und
http://wiki.perl-community.de/bin/view/Wissensbasis/PerlFaq Zeilenumbruch
ftp://test.de Zwischentext gopher://test.de
~;
my @urls;
my $finder = URI::Find->new(
sub{
my ($uri,$text) = @_;
push(@urls,$uri);
return $uri;
});
$finder->find(\$string);
print $_,"\n" for(@urls);
Ausgabe:
C:\community>uri_find.pl
http://test.de/
http://perlseiten.renee-baecker.de/
http://board.perl-community.de/
http://wiki.perl-community.de/bin/view/Wissensbasis/PerlFaq
ftp://test.de
gopher://test.de
Mehr dazu in der
Doku zu URI::Find.
Ergänzungen, Kommentare
TinaMueller - 14 Jul 2003 - FAQ schon vorhanden
...unter
StringsWieFindeIchEineURLInEinemTextabschnitt
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden (natürlich ohne das <verbatim>):
---+++ Main.??? - 14 Jul 2003 - Betreff