在文本中寻找 URI 地址

来源:互联网 发布:苏州楼盘的成交数据 编辑:程序博客网 时间:2024/04/29 01:27

在文本中寻找 URI 地址

Category: Modules   Keywords: uri find

我们经常碰到这样的任务,在一段文本中找到 URL/URI 地址,然后让这个地址变为可以点击。
最寻常的方法就是用正则表达式来做。不过有时候这不是很理想。

CPAN 中有一个 URI::Find 模块专门来做这事。实例代码如下:

#!/usr/bin/perl
use strict;
use warnings;

use URI::Find;

my $text = <<HTML;
hi, it's from http://www.fayland.org/ then 1313s.com?
HTML

my $finder = URI::Find->new(
   sub {
       my($uri, $orig_uri) = @_;
       return qq|<a href="$uri">$orig_uri</a>|;
   });
$finder->find(/$text);

print $text;

这样 $text 的输出会变为:
hi, it's from <a href="http://www.fayland.org/">http://www.fayland.org/</a> then
1313s.com?
如果想让 1313s.com 也变为可点击,则可以使用 URI::Find::Schemeless

 

#!/usr/bin/perl
use strict;
use warnings;

use URI::Find::Schemeless;

my $text = <<HTML;
hi, it's from http://www.fayland.org/ then 1313s.com?
HTML

my $finder = URI::Find::Schemeless->new(
   sub {
       my($uri, $orig_uri) = @_;
       return qq|<a href="$uri">$orig_uri</a>|;
   });
$finder->find(/$text);

print $text;

Schemeless 的意思就是没有协议头(如 http )也匹配。
$text 变为:
hi, it's from <a href="http://www.fayland.org/">http://www.fayland.org/</a> the
<a href="http://1313s.com/">1313s.com</a>?
大致如是。详细的查阅 URI::Find , have fun!
 
原创粉丝点击