4

どうすればURLの一部を取得できますか?

例えば:

http://www.facebook.com/xxxxxxxxxxx
http://www.stackoverflow.com/yyyyyyyyyyyyyyyy

私はこの部分だけを取る必要があります:

facebook.com
stackoverflow.com
4

6 に答える 6

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
于 2013-03-26T02:37:40.400 に答える
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

于 2013-03-26T15:19:20.760 に答える
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
于 2013-04-20T17:55:56.470 に答える
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";
}
于 2013-03-26T02:08:30.607 に答える
0
$a="http://www.stackoverflow.com/yyyyyyyyyyyyyyyy";
if($a=~/\/\/\w+\.(.*)\// )
{   print $1; }
else
{ print "false";  }
于 2013-04-01T05:47:36.910 に答える
-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/;
于 2013-03-26T01:54:16.820 に答える