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;
}
以上函数的功能是,传入一个网页和超链接的名称,函数返回所以符合名称的网址
但是运行总出错
为什么
@老虎会游泳
{
$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];
}
{
$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;
}
你注意到那个括号了吗?
1表示使用括号里的内容----只有网址。
U是关闭贪婪模式。必须使用U。
.*?
*后面的?也可以关闭贪婪模式
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>');