2012-06-15 69 views
0

有上php.net的例子如何獲得最後兩個域分段分兩個步驟:的preg_match:得到URL後兩個域分段在一個表達

<?php 
//get host name from URL 
preg_match("/^(http:\/\/)?([^\/]+)/i", 
    "http://www.php.net/index.html", $matches); 
$host = $matches[2]; 

// get last two segments of host name 
preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches); 
echo "domain name is: {$matches[0]}\n"; 

/* Output is php.net */ 

?> 

但我怎麼能做到一步到位,只使用一個preg_match表達式?

回答

4

這段代碼:

$domain = 'http://www.php.net/index.html'; 
$url = parse_url($domain); 
$tokens = explode('.', $url['host']); 

print_r($tokens); 

會給你這樣的數據:

Array 
(
    [0] => www 
    [1] => php 
    [2] => net 
) 

我認爲沒有必要對regexs只要它是很難正確地解析URL他們。從得到的$ tokens數組中,您可以輕鬆地提取主機名的任何部分。

更新:

print_r($url); 

$網址數組包含了所有必要的細節:

Array 
(
    [scheme] => http 
    [host] => www.php.net 
    [path] => /index.html 
) 
+2

+1打我吧... –

+0

是的,它會的。但我需要preg_match的結果。只需一個正則表達式即可獲得http://www.php.net/index.html - > php.net。 –

+0

@TarasBulgakov查看更新後的帖子。 – ioseb

相關問題