2012-11-10 23 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://方案。