2012-04-23 23 views
0

我們列出了這種格式的URL(http://www.xyz.gov.ac.in)。並非所有人都是這樣,他們中的一些人擁有正常的域名。我很困惑如何從3點的URL獲取域名。我們的代碼對2個虛線的域名工作正常。 這裏是代碼,我們有:有三個點的域的正則表達式例如: - 「gov.ac.in」

function get_domain($url) 
{ 
    $pieces = parse_url($url); 
    $domain = isset($pieces['host']) ? $pieces['host'] : ''; 
    if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) { 
    return $regs['domain']; 
    } 
    return false; 
} 

echo get_domain($url) ; 

我們如何修改上面的代碼以適應3個域,以及其他類型的?

回聲結果應該是這種格式xyz.gov.ac.in

回答

0

試試這個:

/(^[\w|-]+\.)(?P<domain>([\w|-]+\.)+(\w+))/i  

希望這將有助於..

+0

如果我們的網址是http://www.octave-global.com,那麼它將無法正常工作。請幫我解決這個問題 – PPS 2012-04-25 06:41:57

+0

我編輯了我的答案,請看看。 – 2012-04-25 07:21:37

0

您應該能夠使用這個表達式代替

/(?P<domain>([a-z0-9][a-z0-9\-]{1,63}\.)+[a-z\.]{2,6})$/i 
+0

它允許子域。如果URl是http://forum.xyz.com.uj.xa/adsfasdf.lkj ...它將返回forum.xyz.com.uj.xa而不是xyz.com.uj.xa – PPS 2012-04-23 12:30:15

1

基本上,你不能。至少不是沒有包含所有「頂級域名」的查詢表。

例如,在我的國家(荷蘭),我們有.nl.co.nl。但www.gov.nl是一個正常的網站(我試圖說明,你不能自動說,​​是不是一個域)。並且www.edu.nl不存在。

任何試圖解析它們的標準正則表達式都會告訴您域名是www.gov.nl,而域名實際上是gov.nl。相同的edu.nl

您可以完成所需的唯一方法是獲取所有頂級域名(和頂級域名)的列表並使用它來解析它們。

我相信Firefox和Chrome都有這樣一個列表(用於着色URL中的域名)並不斷保持最新狀態。也許看看這些消息來源?