2012-11-10 25 views
0

我得到一段包含幾個網址的文字。我想提取文本中給出的URL中的主機列表。例如:讓主人脫離文字完整的網址列表

INPUT:

​​

期望的輸出:

Array(
[0]=>www.jenniferlopezonline.com 
[1]=>www.jenniferlopez.com 
[2]=>www.twitter.com 
[3]=>www.myspace.com 
[4]=>www.youtube.com 
); 

我嘗試這樣做的代碼:

preg_match_all('/([a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+)/i',$text,$matches); 
print_r($matches); 

輸出有點像這樣:

Array 
(
[0] => Array 
(
[0] => www.jenniferlopezonline.com 
[1] => www.jenniferlopez.com 
[2] => www.twitter.com 
[3] => www.myspace.com 
[4] => www.youtube.com 
) 

[1] => Array 
(
[0] => www.jenniferlopezonline.com 
[1] => www.jenniferlopez.com 
[2] => www.twitter.com 
[3] => www.myspace.com 
[4] => www.youtube.com 
) 

[2] => Array 
(
[0] => . 
[1] => . 
[2] => . 
[3] => . 
[4] => . 
) 
); 

將此輸出轉換爲所需的輸出會花費我更多的代碼,這會使進程變慢。我將散裝數據,所以我不能負擔得起。

回答

0

只需刪除不必要的括號即可。他們正在捕捉其產生在首位的附加陣列(並在發動機昂貴的東西)組:

preg_match_all('/[a-z0-9\_\-]+(\.)[a-z0-9\_\.\-]+/i',$text,$matches); 

這將使你在$matches[0]而不是立即$matches所需的陣列,但它是不可能的改變這種行爲。另外,這已經爲您節省了最多的計算開銷。指定$matches[0]$array可能相當可以忽略不計。

0

您也可以嘗試parse_url(),它會爲您提供URL的組件關聯數組。

例如:

$parts = parse_url('http://twitter.com/jlo'); 
echo $parts['host']; 

將打印twitter.com

確保您的網址包含http://方案。