我需要一个正则表达式来验证使用Perl的网站URL。
答案 0 :(得分:11)
答案 1 :(得分: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,我可能会创建一个对象,所以我不妨从它开始。
答案 2 :(得分:3)
use Regexp::Common qw /URI/;
while (<>) {
/($RE{URI}{HTTP})/ and print "$1 is an HTTP URI.\n";
}
答案 3 :(得分:2)
由于您正在谈论&#34;网站网址&#34;,我猜您只对HTTP和HTTPS网址感兴趣。
为此,您可以使用Perl的 Data::Validate::URI 模块,而不是使用正则表达式。
例如,要验证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;