-2

だから私がやりたいのは、「。」の後に表示される最初の「/」を含めて、すべてを削除することです。したがって、http://linux.pacific.net.au/primary.xml.gz は次のようになります:http://linux.pacific.net.au

正規表現を使用してこれを行うにはどうすればよいですか?私が実行しているシステムはURIツールを使用できません。

4

3 に答える 3

6
$url = 'http://linux.pacific.net.au/primary.xml.gz';
($domain) = $url =~ m!(https?://[^:/]+)!;
print $domain;

出力:

http://linux.pacific.net.au

これは、URIをデコードするために使用できる公式の正規表現です。

  my($scheme, $authority, $path, $query, $fragment) =
  $uri =~ m|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
于 2012-08-09T01:58:47.347 に答える
5

URI::Split標準のURLをその構成要素に分割して再結合するものを使用することをお勧めします。最初の2つの部分(スキームホスト)が必要です。

use strict;
use warnings;

use URI::Split qw/ uri_split uri_join /;

my $scheme_host = do {
  my (@parts) = uri_split 'http://linux.pacific.net.au/primary.xml.gz';
  uri_join @parts[0,1];
};

print $scheme_host;

出力

http://linux.pacific.net.au

アップデート

あなたのコメント私が実行しているシステムがURIツールを使用できないということは、モジュールをインストールできないことを意味する場合、ここに正規表現ソリューションがあります。

「。」の後に表示される最初の「/」を含め、すべてを削除したいとします。、/^.*?\./最初のドットをm|[^/]+|見つけ、それ以降のすべてを次のスラッシュまで見つけます。

出力は前のコードの出力と同じです

use strict;
use warnings;

my $url = 'http://linux.pacific.net.au/primary.xml.gz';

my ($scheme_host) = $url =~ m|^( .*?\. [^/]+ )|x;

print $scheme_host;
于 2012-08-09T02:23:18.163 に答える
4

私が実行しているシステムはURIツールを使用できません。

最初にその問題を解決するためにできることは何でもすることを強くお勧めします。CPANモジュールを使用できない場合は、Perlの多くの機能を利用できなくなり、Perlのプログラミングライフは必要以上に苛立たしくなります。

于 2012-08-09T09:07:54.570 に答える