Regex Perl将url字符串转换为链接

Regex Perl将url字符串转换为链接,regex,perl,url,Regex,Perl,Url,我正在寻找一种方法来找到一个字符串中的url,并将其转换为链接 url可以位于字符串中的任何位置(开头、中间或结尾) 首选正则表达式,但欢迎使用CPAN模块。最常见的解决方案是(没有双关语)。您需要使用如下所示的{-keep}版本来保持匹配(显然是在$1中) 使用Regexp::Common qw/URI/; 而(){ /$RE{URI}{HTTP}{-keep}/并打印“”; } 很明显,上面的示例每行只找到1个链接。更多的修正留给用户作为练习 另一个选择是施沃恩的。例如: use CG

我正在寻找一种方法来找到一个字符串中的url,并将其转换为链接

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

首选正则表达式,但欢迎使用CPAN模块。

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

使用Regexp::Common qw/URI/;
而(){
/$RE{URI}{HTTP}{-keep}/并打印“”;
} 
很明显,上面的示例每行只找到1个链接。更多的修正留给用户作为练习


另一个选择是施沃恩的。例如:

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>";
使用cgiqw(escapeHTML);
使用URI::Find;
my$finder=URI::Find->new(子系统){
我的($uri,$orig_uri)=@;
返回qq | |;
});
$finder->find(\$text,\&escapeHTML);
打印“$text”;
严格使用;
使用警告;
使用5.010;
使用utf8;
使用Regexp::Common qw/URI/;

my$string_with_url=您可以使用Regexp::Common查找字符串,然后进行替换,使其成为链接。 在没有任何其他东西的情况下,我使用URL作为链接文本

使用Regexp::Common“URI”;
my$string=“一些包含http://stackoverflow.com/questions/4587876/perl-convert-url-string-to-link 中间”;
$string=~s($RE{URI}{HTTP}))
()gx;
打印$string;

ascii艺术是干什么用的?还是我遗漏了什么?他要求“在字符串中查找url并将其转换为链接。”他没有指定哪个链接。或者其他任何事情,真的。不能说我不值得。它工作得很好,除了不承认HTTPS。我尝试使用相同的代码,并用HTTPS替换HTTP,但没有成功。任何想法?$RE{URI}{HTTP}{-scheme=>qr/https?/}似乎都可行,根据文档:
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>";
use strict;
use warnings;
use 5.010;
use utf8;
use Regexp::Common qw /URI/;

my $string_with_url = <<'END_STRING';
This is an url to your question:
http://stackoverflow.com/questions/4587876/perl-convert-url-string-to-link
END_STRING

say $string_with_url;

$string_with_url =~ s/($RE{URI}{HTTP})/get_link()/eg;

say $string_with_url;

sub get_link {
    return <<'END_LINK';
        _____________¶¶¶¶¶¶¶¶¶¶¶¶¶¶
        ___________¶¶6666555666666¶¶¶
        __________¶¶6666555555556666¶¶
        ___¶¶¶__¶¶¶¶116666556611¶¶666¶¶¶¶
        __¶¶cc¶¶§§§¶¶¶11111111¶¶¶¶¶6¶¶cc¶¶
        __¶¶cc¶¶¶§§§§¶¶¶¶¶¶¶¶¶¶§§§¶¶¶¶cc¶¶
        __¶¶ssc¶¶¶¶§§§§§§§§§§§§§§¶¶¶¶css¶¶
        __¶¶ss¶¶§§¶¶¶¶¶¶¶¶¶¶¶¶¶¶¶§§§¶¶ss¶¶
        ____¶¶ss¶¶ss¯¯¯¯ssss¯¯¯¯ss¶¶ss¶¶
        ______¶¶ssss__¶¶cccc¶¶__ssss¶¶
        ______¶¶¶ssscc¶¶cccc¶¶ccss¶¶¶¶
        _____¶¶££¶¶sssccccccccss¶¶¶££¶¶
        ____¶¶££££¶¶ss¶¶cccsss¶¶¶£££¶¶¶¶¶
        __¶¶¯¯¶¶¶¶¶¶¶¶¯¯¶¶¶¶¶¶¶££££¶¶¶ss¶¶
        __¶¶____________¶¶££££££££¶¶ssss¶¶
        __¶¶¯¯$$$$$$$$¯¯¶¶£££££££££¶¶¶cc¶¶
        __¶¶__$$ƒƒƒƒ$$__¶¶£££££££¢¢¶¶ccc¶¶
        __¶¶¯¯$$ƒƒƒƒ$$¯¯¶¶¢¢¢¥¥¢¢£££¶¶cc¶¶
        __¶¶___$$ƒƒ$$___¶¶££££££££¶¶¶¶¶¶¶
        ____¶¶__$$$$__¶¶££££££¶¶¶¶¥¥¶¶¶
        ______¶¶____¶¶¶¶¶¶¶¶¶¶¥¥¥¥¥¶¶¶
        ________¶¶¶¶¶¶¶¶¶¥¥¥¥¥¥¥¶¶¶¶
        ____________¶¶¶¶¶¶¶¶¶¶¶¶
END_LINK
}
    use Regexp::Common "URI";
    my $string="Some text containing http://stackoverflow.com/questions/4587876/perl-convert-url-string-to-link in middle" ;

    $string =~    s( ($RE{URI}{HTTP}) )
                  (<a href="$1">$1</a>)gx  ;

    print $string ;