获取页面中的所有链接地址的PHP函数

    下面这个用PHP写的函数,可以获取任意的字符串$string中的所有链接地址($string可以是从一个HTML页面文件直接读取出来的字符串),结果保存在一个数组中返回.该函数自动把电子邮件地址排除在外,而且返回的数组中不会有重复元素.

function GetAllLink($string)
{
  $string = str_replace("\r","",$string);
  $string = str_replace("\n","",$string);
  
  $regex[url] = "((http|https|ftp|telnet|news):\/\/)?([a-z0-9_\-\/\.]+\.[][a-z0-9:;&#@=_~%\?\/\.\,\+\-]+)"; 
  $regex[email] = "([a-z0-9_\-]+)@([a-z0-9_\-]+\.[a-z0-9\-\._\-]+)";  

  //去掉标签之间的文字
  $string = eregi_replace(">[^<>]+<","><", $string);       
  
  //去掉JAVASCRIPT代码
  $string = eregi_replace("<!--.*//-->","", $string);
  
  //去掉非<a>的HTML标签  
  $string = eregi_replace("<[^a][^<>]*>","", $string); 
 
  //去掉EMAIL链接       
  $string = eregi_replace("<a([ ]+)href=([\"']*)mailto:($regex[email])([\"']*)[^>]*>","", $string); 
  
  //替换需要的网页链接 
  $string = eregi_replace("<a([ ]+)href=([\"']*)($regex[url])([\"']*)[^>]*>","\\3\t", $string); 

  $output[0] = strtok($string, "\t");
  while(($temp = strtok("\t")))
  {
    if($temp && !in_array($temp, $output))
      $output[++$i] = $temp;
  }

  return $output;
}