Perl将url字符串转换为链接

sha*_*ess 2 regex url perl

我正在寻找一种方法来查找字符串中的URL并将其转换为链接.

url可以是字符串中的任何位置(开头,中间或结尾).

Regex是首选,但欢迎使用CPAN模块.

DVK*_*DVK 6

最常见的解决方案是Regexp :: Common(没有双关语).您需要使用{-keep}如下所示的版本来保持匹配($1显然)

use Regexp::Common qw /URI/;

while (<>) {
    /$RE{URI}{HTTP}{-keep}/ and print "<A HREF="$1">My Link Name</A>";
} 
Run Code Online (Sandbox Code Playgroud)

希望很明显,上面的例子每行只找到1个链接.修复更多内容留给用户锻炼.


另一种选择是Schwern的URI :: Find.从POD示例:

use CGI qw(escapeHTML);
use URI::Find;
my $finder = URI::Find->new(sub {
    my($uri, $orig_uri) = @_;
    return qq|<a href="$uri">$orig_uri</a>|;
});
$finder->find(\$text, \&escapeHTML);
print "<pre>$text</pre>";
Run Code Online (Sandbox Code Playgroud)


Hug*_*eir 5

use strict;\nuse warnings;\nuse 5.010;\nuse utf8;\nuse Regexp::Common qw /URI/;\n\nmy $string_with_url = <<'END_STRING';\nThis is an url to your question:\nhttp://stackoverflow.com/questions/4587876/perl-convert-url-string-to-link\nEND_STRING\n\nsay $string_with_url;\n\n$string_with_url =~ s/($RE{URI}{HTTP})/get_link()/eg;\n\nsay $string_with_url;\n\nsub get_link {\n    return <<'END_LINK';\n        _____________\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\n        ___________\xc2\xb6\xc2\xb66666555666666\xc2\xb6\xc2\xb6\xc2\xb6\n        __________\xc2\xb6\xc2\xb66666555555556666\xc2\xb6\xc2\xb6\n        ___\xc2\xb6\xc2\xb6\xc2\xb6__\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6116666556611\xc2\xb6\xc2\xb6666\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6cc\xc2\xb6\xc2\xb6\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xb6\xc2\xb6\xc2\xb611111111\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb66\xc2\xb6\xc2\xb6cc\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6cc\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6cc\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6ssc\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6css\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6ss\xc2\xb6\xc2\xb6\xc2\xa7\xc2\xa7\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa7\xc2\xa7\xc2\xa7\xc2\xb6\xc2\xb6ss\xc2\xb6\xc2\xb6\n        ____\xc2\xb6\xc2\xb6ss\xc2\xb6\xc2\xb6ss\xc2\xaf\xc2\xaf\xc2\xaf\xc2\xafssss\xc2\xaf\xc2\xaf\xc2\xaf\xc2\xafss\xc2\xb6\xc2\xb6ss\xc2\xb6\xc2\xb6\n        ______\xc2\xb6\xc2\xb6ssss__\xc2\xb6\xc2\xb6cccc\xc2\xb6\xc2\xb6__ssss\xc2\xb6\xc2\xb6\n        ______\xc2\xb6\xc2\xb6\xc2\xb6ssscc\xc2\xb6\xc2\xb6cccc\xc2\xb6\xc2\xb6ccss\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\n        _____\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6sssccccccccss\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6\n        ____\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6ss\xc2\xb6\xc2\xb6cccsss\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6\xc2\xaf\xc2\xaf\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xaf\xc2\xaf\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6\xc2\xb6ss\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6____________\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6ssss\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6\xc2\xaf\xc2\xaf$$$$$$$$\xc2\xaf\xc2\xaf\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6\xc2\xb6cc\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6__$$\xc6\x92\xc6\x92\xc6\x92\xc6\x92$$__\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa2\xc2\xa2\xc2\xb6\xc2\xb6ccc\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6\xc2\xaf\xc2\xaf$$\xc6\x92\xc6\x92\xc6\x92\xc6\x92$$\xc2\xaf\xc2\xaf\xc2\xb6\xc2\xb6\xc2\xa2\xc2\xa2\xc2\xa2\xc2\xa5\xc2\xa5\xc2\xa2\xc2\xa2\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6cc\xc2\xb6\xc2\xb6\n        __\xc2\xb6\xc2\xb6___$$\xc6\x92\xc6\x92$$___\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\n        ____\xc2\xb6\xc2\xb6__$$$$__\xc2\xb6\xc2\xb6\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xa3\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa5\xc2\xa5\xc2\xb6\xc2\xb6\xc2\xb6\n        ______\xc2\xb6\xc2\xb6____\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xb6\xc2\xb6\xc2\xb6\n        ________\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xa5\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\n        ____________\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\xc2\xb6\nEND_LINK\n}\n
Run Code Online (Sandbox Code Playgroud)\n