给定一个seed url:
$url = 'http://www.news.com.au/technology'; 
$host = 'www.news.com.au';要求只在这个host下,得到<a href...></a>里面的包含"....$host/technology/..."全部网址(原来的每个url都没有后缀),以及这些网址的标题("<a></a>" 里面包含的文字内容就是新闻的标题也要得到)怎么实现以上要求?主要是正则表达式怎么写?谢谢!

解决方案 »

  1.   

    <?php 
    //功能:将文本中的链接地址转成HTML 
    //输入:字符串 
    //输出:字符串 
    function url2html($text) 

    //匹配一个URL,直到出现空白为止 
    preg_match_all("/http:\/\/?[^\s]+/i", $text, $links); 
    //设置页面显示URL地址的长度 
    $max_size = 40; 
    foreach($links[0] as $link_url) 

    //计算URL的长度。如果超过$max_size的设置,则缩短。 
    $len = strlen($link_url); 
    if($len > $max_size) 

    $link_text = substr($link_url, 0, $max_size)."..."; 
    } else { 
    $link_text = $link_url; 

    //生成HTML文字 
    $text = str_replace($link_url,"<a href='$link_url'>$link_text</a>",$text); 

    return $text; 

    //运行实例 
    $str = “这是一个包含多个URL链接地址的多行文字。欢迎访问http://www.jb51.net”; 
    print url2html($str); 
    /*输出结果 
    这是一个包含多个URL链接地址的多行文字。欢迎访问<a href='http://www.jb51.net'> 
    http://www.jb51.net</a> 
    */ 
    ?> 
      

  2.   

    preg_match_all(
                '/<a.*?(?: |\\t|\\r|\\n)?href=[\'"]?(.+?)[\'"]?(?:(?: |\\t|\\r|\\n)+.*?)?>(.+?)<\/a.*?>/sim', 
                $html, $strResult, PREG_PATTERN_ORDER);