$matches[2]这个数组里就是你提取的链接.
$matches[0]提取的是符合<a href='xxx'>asdfasd</a>这样的串,
这是preg_match_all这个函数的特点.

解决方案 »

  1.   

    楼上是啊,
    如果<a href='#'>asdfasd </a>这样的串也给提取出来,我要排除这一种
    还有<a href='javascript:viod(0)'>asdfasd </a>像这种javascript的也排除呀
      

  2.   


    $pat="/<\s*a\s.*?href\s*=\s*[\"\']*([^\s\>#\'\"\)\(]+)[\"\']*>(.*?)\<\/a\>/is";你的正则过于滥用.*?了,我给你精简一下.
      

  3.   

    楼上的也有挺多问题的Array
    (
        [0] => Array
            (
                [0] => <A href="http://www.aa.com">aa</A>
                [1] => <A href="http://www.aa.com">aa</A>
                [2] => <A
      href="http://www.google.com/coop/cse?cx=017961863061223484325:by0hzdu5kl0" 
      target=_blank>搜索</A> 
      <LI><A href="#" target=_blank>论坛社区</A> 
    像这样的就认不出来了
     [26] => <A href="move1-92.html" target="_blank"><IMG alt="刘心武揭秘红楼梦_秦可卿被告发之谜" src="http://www.11173.cn/Uploadpic/ALLIMG/200752521481638366.jpg" width="100" height="100"></A> <!--100*100 -->
      <H3><A href="move1-92.html" target="_blank">刘心武揭秘红楼梦_秦可卿被告发之谜</A></H3>
      <P><SPAN class=movie_date>发布时间:2008-09-14</SPAN><BR><SPAN 
      class=movie_category>分类:<A 
      href="list1-4-1.html">幽默搞笑</A>            [27] => 
    这个也认不出来
      

  4.   


    $pat="/<\s*a\s.*?href\s*=\s*[\"\']*([^\s\>#\'\"\)\(]+)[\"\']*[^\>\<]*>(.*?)\<\/a\>/is";万变不离其踪,只要知道原理就很容易做了.
    你这个不是要匹配一下,可能加target="_blank"的这种情况吗,加上[^\>\<]*就好了,同理,如果在href加上有,也可以加个[^\>\<]*这样的,
    我只能说的是,不要烂用非贪婪写法(.*?),
    一是会影响效率,
    二是避免出现匹配不正常的情况.
      

  5.   

    当target=_blank的时候也不行啊。
    正则很难看懂,看了几个晚上,都没怎么了解
      

  6.   


    echo '<pre>';
    function get_url($str){
        //$pat='/<a(.*?)href=\'(.*?)\'(.*?)>(.*?)<\/a>/i';
        $pat="'<\s*a\s.*?href\s*=\s*([\"\'])?(?(1)(?!\#|javascript)(.*?)\\1|([^\s\>]+))[^>]*>?(.*?)</a>'isx";
        ///:/http:\/\/[a-zA-Z0-9][a-zA-Z0-9\/._-]+[\.html]/;
        preg_match_all($pat,$str,$matches);
        return $matches;
    }
    $stream="sdkkk<center><a href=dffd/aa.php?diih=23>sdfsdfffdd</a></center><a href='http://www.dfkdf.com/sdfkjsdf.asp?id=334'>dfkds</a><a href=\"dffd/aa.php?diih=3\">3222</a><a href='dffd/aa.html'>3222</a><a href='#'>3222</a><a href='javascript:void(0)'>3222</a>";
    //echo($stream);
    $matches=get_url($stream);
    print_r($matches);
    echo '</pre>';
      

  7.   

    能不能改这个呢
    我发现这个比我原来的好多了
    只要排除target=_black就可以了
    $pat="/<\s*a\s.*?href\s*=\s*[\"\']*([^\s\>#\'\"\)\(]+)[\"\']*[^\>\<]*>(.*?)\<\/a\>/is";