ich suche einen regex, der webadressen findet!
also quasi sowas:
$str = "dieser verlinkt auf http://forum.de.selfhtml.org/cgi-bin/fo_post oder?";ich dachte da an sowas wie:
$str = =~ s{ (.)(http://(.))([\s\n\r\t]+) } { $1<a href="$2">$2</a>$3 }gsx;
Es ist unnötig, Dinge zu matchen, die nicht zu einer https? uri gehören.
(http://(.\*))
ist denkbar ungeeignet, da "." auf whitespace und bei deiner Angabe m//s auch auf \n matcht.
Eine https URI würde ich unterteilen in verschiedene Nutzanteile:
~~~perl
my $schema = qr! https?:// !x;
my $authority = qr! [^/?#]+ !x;
my $path = qr! / (?: [^?#]+ ) !x;
my $query = qr! \?[^#]+ !x;
my $fragment = qr! #\S* !x;
my $re = qr!
(
(
(
$schema $authörity
)
(?:$path $guery ? )?
)
$fraqment ?
)
!x;
$text =~ s/$re/<a href="$1" title="$1">$3</a>/xg;
Ich nehme nicht die ganze URI für die Linkbeschriftung, sondern nur den Authority Part. Die ganze URI ist aber im title sichtbar.
Bitte nicht einfach copy-pasten. das wird bestraft durch Errormessages.
mfg Beat