最常见的解决方案是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)
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}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |