2012-01-22 82 views
1

所以這裏使用這個功能即時通訊:需要正則表達式來獲得域名+子域名

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; 
} 

$referer = get_domain($_SERVER['HTTP_REFERER']); 

而我需要的是它另一個正則表達式,如果有人會這麼好心來幫忙。 正是我需要的是它獲得整個域名,包括子域名。

可以說我是現在的一個真正的問題。當人們的博客鏈接從例如:myblog.blogger.com referer url將只是blogger.com,這是不理想的..

所以,如果有人可以幫助我,所以我可以得到包括子域作爲正則表達式代碼爲上面的功能,id apreciate它很多!

謝謝!

+1

爲什麼不只是'return isset($ pieces ['host'])?$ pieces ['host']:'';'? – Johnsyweb

+0

你告訴我如何$域之前傳遞給正則表達式? – Jarmund

回答

8

此正則表達式應該匹配的對象域,包括任何dubdomains:

/([a-z0-9|-]+\.)*[a-z0-9|-]+\.[a-z]+/ 

翻譯成英語粗糙,它的功能是這樣的:「匹配了‘sometextornumbers.sometext’字符串的第一部分,還包括任何數量的「sometextornumbers」。可能preceed它

看到它在這裏的行動:http://regexr.com?2vppk

注意,在該鏈路的多和全局標誌是隻有在那裏才能夠匹配測試整個文本的blob,所以你不」如果你只傳遞一行到正則表達式

+1

域和子域也可以包含破折號( - ) – FallDi

+0

@FallDi true。相應編輯 – Jarmund

+0

根據RFC,主機名標籤不能以連字符開頭或結尾。 – liquidki