2010-04-08 56 views
3

我需要一个正则表达式来验证使用Perl的网站URL。如何验证Perl中的网站URL?

+0

您需要提供更多信息。你为什么需要它?什么是“网站网址”? – Jens 2010-04-08 10:27:44

+1

为什么你需要验证网址?你在哪里得到它们,你在做什么。 – 2010-04-08 11:27:52

+0

@Jens我想网站网址是指那些包含http或https服务标识符的网站。否则,网址可能包含以下内容:news:alt.rec.motorcycle或gopher://gumby.brain.headache.edu:151/7fonebook.txt – Mike 2010-04-08 11:57:43

回答

3
use Regexp::Common qw /URI/; 
    while (<>) { 
     /($RE{URI}{HTTP})/  and print "$1 is an HTTP URI.\n"; 
    } 
+0

可能是“HTTP URI”是一个更好的示例。 – ysth 2010-04-08 11:01:35

+1

网站网址可以是HTTP或HTTPS。 – 2015-01-09 16:01:10

10

我不使用正则表达式。我尝试创建一个URI对象,看看会发生什么。如果它有效,我有一个URI对象,我可以查询它以获取该方案(其他内容会变成“无方案”的URI)。

use URI; 

while(<DATA>) 
    { 
    chomp; 
    my $uri = URI->new($_, 'http'); 
    if($uri->scheme) { print "$uri is a URL\n"; } 
    else    { print "$uri is not a URL\n"; } 
    } 

__END__ 
foo.html 
http://www.example.com/index.html 
abc 
www.example.com 

如果我正在查找特定类型的URI,我可以查询该对象以查看它是否满足我需要的任何内容,例如特定的域名。如果我正在使用URL进行某些操作,我可能会创建一个对象,所以我不妨从它开始。

+0

@brian,你的脚本看起来不太正确。我猜想没有http服务标识符,www.example.com仍然是一个有效的url,但脚本说的是相反的。 – Mike 2010-04-08 11:54:59

+2

主机名称不是URL。如果没有计划,www.example.com可能是主机名,文件或其他内容。没有什么魔法可以自己区分这些东西。这是提供内容和意义的网址。 – 2010-04-08 12:11:33

+0

好吧,看来Regexp :: Common qw/URI /可以做同样的事情。但是,如果有人应该手动写下很多没有http标识的url,那么这些url是否会被认为是有效的? – Mike 2010-04-08 12:11:57

2

由于您在谈论“网站网址”,我想您只对HTTP和HTTPS网址感兴趣。

为此,您可以使用Perl的​​模块,而不是使用正则表达式。

例如,为了验证HTTP和HTTPS的网址:

use Data::Validate::URI; 
my $url = "http://google.com"; 
my $uriValidator = new Data::Validate::URI(); 

print "Valid web URL!" if $uriValidator->is_web_uri($url) 

而且,以验证仅HTTP URL:

print "Valid HTTP URL!" if $uriValidator->is_http_uri($url) 

最后,以验证任何格式良好的URI:

print "Valid URI!" if $uriValidator->is_uri($url) 

如果相反,出于任何原因,你实际上想要一个正则表达式,那么你可以使用类似下面的东西来验证HTTP/HTTPS/FTP/SFTP URL:

print "Valid URL!\n" if $url =~ /^(?:(?:https?|s?ftp))/i;