<?php
function listtitle( $url) {
  $fp = fopen($url, "r" );while(!feof($fp))$contents.=fread($fp,1024);fclose($fp);
  $pattern="|<a\s+?href=\"([^\"]+?)\"[^>]*?>\s*?(.+)\s*?</a>|iU";
  preg_match_all($pattern,$contents, $regArr, PREG_SET_ORDER);
  for($i=0;$i<count($regArr);$i++){
    echo "Url:".$regArr[$i][1]."<br>";
    echo "Text:".$regArr[$i][2]."<br>";
  }
}
listtitle("http://www.csdn.net/expert/");
?>

解决方案 »

  1.   

    好像高兴得太早了,qiushuiwuhen(秋水无恨) 你注意到没有,用你现在这种方法有一些链接漏掉了,还有,图片都显示出来了。
    就这两个问题。
      

  2.   

    我的回答是应该可以办到的,因为已经有人用PHP做到了,只是我们还办不到。也就是说,技术上实现我要的功能完全是可行的。
      

  3.   

    首先感谢qiushuiwuhen(秋水无恨),我也学到了很多!呵呵
    <?php
    function listtitle($url,$key) {
      $contents = implode("", file($url)); 
      $pattern="|<a\s+?href=\"([^\"]+?)\"[^>]*?>\s*?(.+)\s*?</a>|iU";
      preg_match_all($pattern,$contents, $regArr, PREG_SET_ORDER);
      $j=0;
      for($i=0;$i<count($regArr);$i++){
        if(ereg($key,htmlspecialchars($regArr[$i][2]))){
          $titles[$j]["title"]=$regArr[$i][2];   
          $titles[$j]["url"]=$regArr[$i][1];
          $j++;
        }
      }
      for($i=0;$i<count($titles);$i++){
        if(trim($titles[$i]["title"])=="") continue;
        echo "<font color=blue><b>链接:</b></font>".$titles[$i]["url"]."<br>";
        echo "<font color=red><b>标题:</b></font>".strip_tags($titles[$i]["title"])."<br>";
      } 
    }
    listtitle("http://app.china.com/business/inf/srch.php?keys=中国","中国");
    ?>
      

  4.   

    你不是说“这是一个带HTML标识的字串”,所以img也出来了
    因为有些是a href='(单引号)',所以修正如下
    对于是否含有关键字,自己锻炼一下了
     <?php
    function listtitle( $url) {
      $fp = fopen($url, "r" );while(!feof($fp))$contents.=fread($fp,1024);fclose($fp);
      $pattern="/<a\s+?href=(\"|\')??([^\"\']+?)(\"|\')??[^>]*>\s*?(.+)\s*?<\/a>/iU";
      preg_match_all($pattern,$contents, $regArr, PREG_SET_ORDER);
      for($i=0;$i<count($regArr);$i++){
        echo "Url:".$regArr[$i][2]."<br>";
        echo "Text:".$regArr[$i][4]."<br>";
      }
    }
    listtitle("http://www.csdn.net/expert/");
    ?>
      

  5.   

    To phpteam(George) 
    好奇怪,不能从阿里巴巴中国上提取信息,http://china.alibaba.com/bin/search    也不知道文件的类型是什么,只知道是search
      

  6.   

    地址是没有误的,不信你到阿里巴巴中国去查看。
    它的查询form和action就是http://china.alibaba.com/bin/search    
    每个网站都不同,分析起来很麻烦
      

  7.   

    阿里巴巴是用Java Servlet写的,所以你光取个http://china.alibaba.com/bin/search是肯定不行的,他后面还有一大串呢!
      

  8.   

    "<(.*)>.*<\/\1><\/\1>" 匹配一个 HTML 标记。 
    这段代码还比较好理解,只是不知道<\/\1>里面为什么要有个1 用a不行吗?
    哪位解释一下
      

  9.   

    to  qiushuiwuhen(秋水无恨) 
    你的那个例程只能从一个网站搜索信息,如果从多个网站搜索信息的话,可不可以边搜索边显示搜索结果呢?