2011-01-03 12 views
2

私は文字列のURLを見つけてリンクに変換する方法を探しています。PerlはリンクするURL文字列を変換する

URLは、文字列のどこにあっても構いません(先頭、中央、または末尾)。

正規表現が望ましいですが、CPANモジュールも歓迎します。

+1

http://stackoverflow.com/questions/2564661/how-can-i-extract-urls-from-plain-text-with-perl http://stackoverflow.com/questions/2818575/regular -expression-pcre-for-url-matching http://stackoverflow.com/questions/3958180/how-can-i-extract-urls-from-plain-text-in-perl – daxim

答えて

4

あなたは、文字列を検索し、リンクにそれを作るために置換を行うために正規表現::一般的に使用することができます。 他に何もない場合は、URLをリンクテキストとして使用しました。

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 ; 
+0

HTTPSを認識しないことを除いて、うまく動作します。私は同じコードを使ってみましたが、HTTPをHTTPSに置き換えましたが、何もしません。何か案は? – shaneburgess

+2

doc:http://search.cpan.org/~abigail/Regexp-Common-2010010201/libのように、$ RE {URI} {HTTP} { - scheme => qr/https?/}がうまくいくようです。 /Regexp/Common/URI/http.pm – Hugmeir

+0

ありがとう@Hugmeir私はドキュメントを読んだが、スキムの部分を理解できなかった... – shaneburgess

6

最も一般的な解決策は、Regexp::Commonです(意図していません)。あなたは(当然、$1で)一致を維持するために、以下に示すよう

うまくいけば明らかなように
use Regexp::Common qw /URI/; 

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

は、上記の例では、唯一の行につき1つのリンクを見つけ{-keep}バージョンを使用する必要があります。より多くの修正は、ユーザーのための練習として残っています。


もう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>"; 
4
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 
} 
+0

ASCIIアートとは何ですか?または私は何かを逃していますか? – Chris

+0

彼は「文字列内のURLを見つけてそれをリンクに変換する」ように頼んだ。彼はどのリンクを指定しなかった。それとも何か、本当に。 – Hugmeir

+1

-1は醜いASCIIアートです。 – DVK

関連する問題