已掉线,重新登录

首页 > 绿虎论坛 > 历史版块 > 编程 > PHP > 讨论/求助

标题: 求帮助

作者: @Ta

时间: 2012-07-20

点击: 4950

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|隐藏机器人聊天)』

1. 不懂
(/@Ta/2012-07-20 08:05//)

2. 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 08:11//)

3. 你的正则表达式写得真美妙。。。
(/@Ta/2012-07-20 09:48//)

4. 一大堆的集合[]到底要干什么?还有你的模式分隔符在哪里?
(/@Ta/2012-07-20 09:50//)

5. 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 10:02//)

6. 注意:UC使我丢失了$i++的加号。
(/@Ta/2012-07-20 10:03//)

7. 呃 杯具
(/@Ta/2012-07-20 12:10//)

8. @老虎会游泳 不是$a[1]应该是$a[0]吧  然后我发现php很贪婪 貌似你的U用错了
(/@Ta/2012-07-20 12:27//)

9. @五角圆星
你注意到那个括号了吗?
1表示使用括号里的内容----只有网址。
U是关闭贪婪模式。必须使用U。
(/@Ta/2012-07-20 12:37//)

10. 如果你这样写的话也可以不用U
.*?
*后面的?也可以关闭贪婪模式
(/@Ta/2012-07-20 12:38//)

11. 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 12:44//)

12. @老虎会游泳 不对 我运行后把从第一个<a href 到$name</a>  好像u关了前面的贪婪模式但前面的没关
(/@Ta/2012-07-20 12:58//)

13. 我运行后把从第一个<a href 到$name</a>给匹配了  好像u关了后面的贪婪模式但前面的没关
(/@Ta/2012-07-20 12:58//)

14. @五角圆星,你必须使用大写的U。小写的u表示使用utf-8编码
(/@Ta/2012-07-20 13:08//)

15.  @老虎会游泳 我把你的代码复制的 是大写的
(/@Ta/2012-07-20 13:13//)

回复需要登录

9月7日 19:23 星期天

本站由hu60wap6驱动

备案号: 京ICP备18041936号-1