2012-08-09 95 views
-2

所以我想要做的是刪除一切後,包括第一個「/」出現在「。」後面。 so:http://linux.pacific.net.au/primary.xml.gz 會變成:http://linux.pacific.net.au如何使用正則表達式從Perl中的URL獲取主機名?

如何使用正則表達式來做到這一點?我正在運行的系統不能使用URI工具。

+2

我假設你已經嘗試了一些東西,而且做不到。首先向我們展示你的工作。 – Hameed 2012-08-09 01:48:41

+0

僅僅因爲你不能使用Perl模塊並不意味着你不能在它裏面查看它的功能以及它是如何實現的。 – 2012-08-09 18:31:44

回答

5

我建議你使用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; 
+0

我有一種感覺,這是一個任務的問題,他/他需要建立正則表達式... – Hameed 2012-08-09 02:57:06

+0

@Hameed:嗯也許。我也剛剛意識到*我運行的系統不能使用URI工具*可能意味着URI模塊 – Borodin 2012-08-09 03:11:00

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|(?:([^:/?#]+):)?(?://([^/?#]*))?([^?#]*)(?:\?([^#]*))?(?:#(.*))?|; 
4

我運行上不能使用URI工具的系統的。

我真的建議你儘可能地先解決這個問題。如果您無法使用CPAN模塊,那麼您將錯過Perl的許多強大功能,並且您的Perl編程生活將比需要的更令人沮喪。