我怎样才能获得网址的某些部分?
例如:
http://www.facebook.com/xxxxxxxxxxx
http://www.stackoverflow.com/yyyyyyyyyyyyyyyy
我需要采取这一部分:
facebook.com
stackoverflow.com
答案 0 :(得分:11)
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
答案 1 :(得分:2)
我喜欢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
等端口号。
答案 2 :(得分:2)
这可能会有所帮助......
^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
答案 3 :(得分:0)
我找到了一种方法:
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";
}
答案 4 :(得分:0)
$a="http://www.stackoverflow.com/yyyyyyyyyyyyyyyy";
if($a=~/\/\/\w+\.(.*)\// )
{ print $1; }
else
{ print "false"; }
答案 5 :(得分:-1)
只是一些简单的正则表达式。
$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/;