求帮助

function url_hq($html,$name)
{
$z='[<a href="].*[">]'.preg_quote($name).'[</a>]';
preg_match_all("$z",$html,$a);
for($i=0;$i<count($z);$i++)
{
$a[$i]=ltrim($a[$i],'<a href="');
$a[$i]=rtrim($a[$i],'">'.$name.'</a>');
if(stristr($a[$i],"http://")===false)
$a[$i]="http://hu60.cn/".$a[$i];
}
return $a;
}
以上函数的功能是,传入一个网页和超链接的名称,函数返回所以符合名称的网址
但是运行总出错
为什么 @老虎会游泳 
回复列表(15|隐藏机器人聊天)
  • @Ta / 2012-07-20 / /
    不懂
  • @Ta / 2012-07-20 / /
    function url_hq($html,$name)
    {
    $z='~<a href=".*">'.preg_quote($name).'</a>~Uis';
    preg_match_all($z,$html,$a);
    $ct=count($a[0]);
    for($i=0;$i<$ct;$i++)
    {
    $a[0][$i]=ltrim($a[0][$i],'<a href="');
    $a[0][$i]=rtrim($a[0][$i],'">'.$name.'</a>');
    if(strtolower(substr($a[0][$i],0,7))!="http://")
    $a[0][$i]="http://hu60.cn/".$a[0][$i];
    }
    return $a[0];
    }
  • @Ta / 2012-07-20 / /
    你的正则表达式写得真美妙。。。
  • @Ta / 2012-07-20 / /
    一大堆的集合[]到底要干什么?还有你的模式分隔符在哪里?
  • @Ta / 2012-07-20 / /
    function url_hq($html,$name)
    {
    $z='[<a href="(.*)">'.preg_quote($name).'</a>]U'; //你可以使用[]作为模式分隔符,但是不要用太多,只要在开始和结束位置使用。在模式中间使用会被认为是“定义一个集合”。
    preg_match_all($z,$html,$a); //"$z"是没有必要的,$z本身就是一个字符串。
    $a=$a[1]; //只要正则中第一个括号里的内容。
    $cnt=count($a); //count($z)什么的我就不说了。
    for($i=0;$i<$cnt;$i  )
    {
    /**
    * 在正则里打个括号就解决的事干嘛写这么麻烦。不需要了。
    $a[$i]=ltrim($a[$i],'<a href="');
    $a[$i]=rtrim($a[$i],'">'.$name.'</a>');
    **/
    if(stristr($a[$i],"http://")===false)
    $a[$i]="http://hu60.cn/".$a[$i];
    }
    return $a;
    }
  • @Ta / 2012-07-20 / /
    注意:UC使我丢失了$i++的加号。
  • @Ta / 2012-07-20 / /
    呃 杯具
  • @Ta / 2012-07-20 / /
    @老虎会游泳 不是$a[1]应该是$a[0]吧  然后我发现php很贪婪 貌似你的U用错了
  • @Ta / 2012-07-20 / /
    @五角圆星
    你注意到那个括号了吗?
    1表示使用括号里的内容----只有网址。
    U是关闭贪婪模式。必须使用U。
  • @Ta / 2012-07-20 / /
    如果你这样写的话也可以不用U
    .*?
    *后面的?也可以关闭贪婪模式
  • @Ta / 2012-07-20 / /
    preg_match_all('!<a href="(.*)">(.*)</a>!U',$html,$a);
    var_dump($a[1]);
    var_dump($a[2]);
    var_dump($a[0]);
    然后你就知道该怎么选择了。
    你是想要打个括号,然后用$a[1][$i]直接得到你想要的部分呢,还是想自己用一大堆代码去得到?
    $a[0][$i]=ltrim($a[0][$i],'<a href="');
    $a[0][$i]=rtrim($a[0][$i],'">'.$name.'</a>');
  • @Ta / 2012-07-20 / /
    @老虎会游泳 不对 我运行后把从第一个<a href 到$name</a>  好像u关了前面的贪婪模式但前面的没关
  • @Ta / 2012-07-20 / /
    我运行后把从第一个<a href 到$name</a>给匹配了  好像u关了后面的贪婪模式但前面的没关
  • @Ta / 2012-07-20 / /
    @五角圆星,你必须使用大写的U。小写的u表示使用utf-8编码
  • @Ta / 2012-07-20 / /
     @老虎会游泳 我把你的代码复制的 是大写的
添加新回复
回复需要登录