所以我想要做的是刪除一切後,包括第一個「/」出現在「。」後面。 so:http://linux.pacific.net.au/primary.xml.gz 會變成:http://linux.pacific.net.au如何使用正則表達式從Perl中的URL獲取主機名?
如何使用正則表達式來做到這一點?我正在運行的系統不能使用URI工具。
所以我想要做的是刪除一切後,包括第一個「/」出現在「。」後面。 so:http://linux.pacific.net.au/primary.xml.gz 會變成:http://linux.pacific.net.au如何使用正則表達式從Perl中的URL獲取主機名?
如何使用正則表達式來做到這一點?我正在運行的系統不能使用URI工具。
我建議你使用URI::Split
將一個標準的URL分成它的構成部分爲你並重新加入他們。您需要前兩個部分 - 方案和主機。
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;
$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|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|;
我運行上不能使用URI工具的系統的。
我真的建議你儘可能地先解決這個問題。如果您無法使用CPAN模塊,那麼您將錯過Perl的許多強大功能,並且您的Perl編程生活將比需要的更令人沮喪。
我假設你已經嘗試了一些東西,而且做不到。首先向我們展示你的工作。 – Hameed 2012-08-09 01:48:41
僅僅因爲你不能使用Perl模塊並不意味着你不能在它裏面查看它的功能以及它是如何實現的。 – 2012-08-09 18:31:44