我怎么能得到网址的一部分?
例如:
http://www.facebook.com/xxxxxxxxxxx
http://www.stackoverflow.com/yyyyyyyyyyyyyyyy
我只需要这一部分:
facebook.com
stackoverflow.com
use feature qw( say state );
use Domain::PublicSuffix qw( );
use URI qw( );
# Returns "domain.tld" for "subdomain.domain.tld".
# Handles multi-level TLDs such as ".co.uk".
sub root_domain {
my ($domain) = @_;
state $parser = Domain::PublicSuffix->new();
return $parser->get_root_domain($domain);
}
# Accepts urls as strings and as URI objects.
sub url_root_domain {
my ($abs_url) = @_;
my $domain = URI->new($abs_url)->host();
return root_domain($domain);
}
say url_root_domain('http://www.facebook.com/'); # facebook.com
say url_root_domain('https://www.facebook.com/'); # facebook.com
say url_root_domain('http://mobile.google.com/'); # google.com
say url_root_domain('http://www.theregister.co.uk/'); # theregister.co.uk
say url_root_domain('http://www.com/'); # www.com
这可能会有所帮助...
^https?:\/\/www\.([\da-zA-Z\.-]+)
样本输入:
http://www.banglanews24.com/detailsnews.php
nssl=763daee77dc90b1c1baf0a361be2ff3c&nttl=20130416072403189462
http://www.prothom-alo.com/detail/date/2013-04-20/news/3463
http://www.facebook.com/xxxxxxxxxxx
http://www.stackoverflow.com/yyyyyyyyyyyyyyy
样本输出:
banglanews24.com
prothom-alo.com
facebook.com
stackoverflow.com
我喜欢 URI 的答案。OP 请求了一个正则表达式,所以为了尊重这个请求并作为一个挑战,这是我想出的答案。公平地说,有时安装 CPAN 模块并不容易或不可行。我曾参与过一些使用非常特定版本的 Perl 强化的项目,并且只允许使用某些模块。
这是我对正则表达式答案的尝试。请注意,这www.
是可选的。像这样的子域mobile.
很荣幸。搜索/
不是贪婪的,因此最终会正确解析带有目录的 URL。我不依赖于协议;它可以是http, https, file, sftp
任何东西。输出被捕获在$1
.
^.*://(?:[wW]{3}\.)?([^:/]*).*$
样本输入:
http://WWW.facebook.com:80/
http://facebook.com/xxxxxxxxxxx/aaaaa
http://www.stackoverflow.com/yyyyyyyyyyyyyyyy/aaaaaaa
https://mobile.yahoo.com/yyyyyyyyyyyyyyyy/aaaaaaa
http://www.theregister.co.uk/
样本输出:
facebook.com
facebook.com
stackoverflow.com
mobile.yahoo.com
theregister.co.uk
编辑:感谢@ikegami 的额外挑战。:) 现在它支持WWW
任何混合大小写和端口号,如:80
.
$a="http://www.stackoverflow.com/yyyyyyyyyyyyyyyy";
if($a=~/\/\/\w+\.(.*)\// )
{ print $1; }
else
{ print "false"; }
我找到了一个方法:
my @urls = qw( http://www.facebook.com http://www.sadas.com/ );
for my $url (@urls) {
$url =~ s/^https?:(?:www\.)?//ig;
$url =~ s{/.*}{};
print "$url\n";
}
只是一些简单的正则表达式的东西。
$facebook = "www.facebook.com/xxxxxxxxxxx";
$facebook =~ s/www\.(.*\.com).*/$1/; # get what is between www. and .com
print $facebook;
退货
facebook.com
您可能还想让这项工作适用于.net
,.org
等。例如:
s/www\.(.*\.(?:net|org|com)).*/$1/;