文字列中のURLを自動的にリンクさせたい (Perl, 置換, URL, リンク)
掲示板などのプログラムで、文字列中にURLが含まれる場合、自動的にハイパーリンクが張られている場合がある。これを実装するにはどうすれば良いだろうか?
単純にURL(URI)の正規表現を用いて、置換を行えば良い。
以下のサンプルではurlAutoLinkという関数内で置換処理を実行している。
;#
;#自動リンク
;#
#-- シンプル --#
$result1 = urlAutoLink('私のサイトはhttp://ichikoro.com/です');
#-- 細かい指定 --#
$result2 = urlAutoLink(
'私のサイトはhttp://ichikoro.com/です'
, '_blank'
, { title => '新しいウィンドウが開きます'
, style => 'color: Pink'
}
);
#-- 表示 --#
print "$result1\n\n";
print "$result2\n";
sub urlAutoLink{
my $str = shift;
my $target = shift || '_self'; #target属性の値
my $zokusei = shift; #ハッシュのリファレンス
my $add_zokusei = '';
#-- 属性の作成 --#
foreach my $name ( keys %$zokusei ){
$add_zokusei .= qq|$name="$zokusei->{$name}" |;
}
chop $add_zokusei;
#-- 置換 --#
$str =~ s/(s?https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)/<a href="$1" target="$target" $add_zokusei>$1<\/a>/g;
return($str);
}
○実行結果
私のサイトは<a href="http://ichikoro.com/" target="_self" >http://ichikoro.com/</a>です
私のサイトは<a href="http://ichikoro.com/" target="_blank" style="color: Pink" title="新しいウィンドウが開きます">http://ichikoro.com/</a>です
urlAutoLinkでは http(https) のみのサポートとなっているが、同じ要領でftpやメールアドレスなども自動的にリンクさせることが可能である。またこの関数では文字列中に " や ' などが含まれていてもエスケープされない点に注意されたい。
参考:Perlメモ/OHZAKI 氏
