$str='<a href="http://item.taobao.com/item.htm?id=9694595974&ali_refid=a3_620362_1007:1102370186:7:46702465U84y78608587678s868v3I:7178ec8bae50aef3a187075f995ad009&ali_trackid=1_7178ec8bae50aef3a187075f995ad009" target="_blank"><img src="http://img01.taobaocdn.com/imgextra/i1/86719988/T20qpBXmFMXXXXXXXX_!!86719988.gif" border="0"></a><img title="" alt="" src="http://img02.taobaocdn.com/imgextra/i2/86719988/T2PdhIXmpbXXXXXXXX_!!86719988.gif" usemap="#elalakeMap" border="0"><map name="elalakeMap"><area shape="RECT" coords="1,1,22,22" href="http://fuwu.taobao.com/service/service.htm?service_id=347">';如以上字符串,将里面的超链接全部提取出来,如果此链接中有类似于 "id=9694595974"(其中id=后面的数字是系统自动生成的,而且数字后面跟的参数有时有 ,有时没有,如上例中的(&ali_refid=a3_620362_1007:1102370186:7:46702465U84y78608587678s868v3I:7178ec8bae50aef3a187075f995ad009&ali_trackid=1_7178ec8bae50aef3a187075f995ad009),可能有有可能没有),将此链接替换为go.php?id=9694595974,并将替换后的链接放回原处,如果原链接没有类似于"id=9694595974"的字符串,将此链接替换为”#“,并放回原处(此字符串中含有多个"id=9694595974"的超链接和多个不含"id=9694595974"的超链接),
解决方案 »
- 有没有discuz/uchome高人可以指导开发?
- 分享:WordPress静态化实用工具cos-html-cache使用方法
- 安装xampp,启动不了apache服务
- 关键时刻出现了一点小问题 求高手
- 求jquer页面跳转问题
- session问题
- 数据采集的问题
- 改写的两个SAE的应用
- preg_replace_callback 中 function($match) use ($ten), 里面的 use 是什么意思
- wordpress 中的 pluging.php 中的函数 has_filter() 源码的变化及疑惑
- 现在哪有 red hat linux 9.0 的链接啊 可靠能用的
- 关于使用正则表达式来读取文章分段的问题
<a href="http://item.taobao.com/item.htm?id=9694595974&ali_refid=a3_620362_1007:1102370186:7:46702465U84y78608587678s868v3I:7178ec8bae50aef3a187075f995ad009&ali_trackid=1_7178ec8bae50aef3a187075f995ad009" target="_blank"><img src="http://img01.taobaocdn.com/imgextra/i1/86719988/T20qpBXmFMXXXXXXXX_!!86719988.gif" border="0"></a><img title="" alt="" src="http://img02.taobaocdn.com/imgextra/i2/86719988/T2PdhIXmpbXXXXXXXX_!!86719988.gif" usemap="#elalakeMap" border="0"><map name="elalakeMap"><area shape="RECT" coords="1,1,22,22" href="http://fuwu.taobao.com/service/service.htm?service_id=347">
<a href="http://item.taobao.com/item.htm?id=123456" target="_blank"><img src="http://img01.taobaocdn.com/imgextra/i1/86719988/T20qpBXmFMXXXXXXXX_!!86719988.gif" border="0"></a><img title="" alt="" src="http://img02.taobaocdn.com/imgextra/i2/86719988/T2PdhIXmpbXXXXXXXX_!!86719988.gif" usemap="#elalakeMap" border="0"><map name="elalakeMap"><area shape="RECT" coords="1,1,22,22" href="http://fuwu.taobao.com/service/service.htm?service_id=347">
<a href="http://item.taobao.com/item.htm" target="_blank">aa</a>
<a href="http://item.taobao.com/item.htm?name=key">aa</a>
html;
$str= preg_replace_callback('/<a\s+href="(.*?)"/s','foo',$str);
echo $str; function foo($m){
if(strpos($m[1],'id') !==false){
preg_match('/id=(\d+)/i',$m[1],$ar);
return '<a href="go.php?id='.$ar[1].'"';
}else{
return '<a href="#"';
}
}
<a href="go.php?id=9694595974" target="_blank"><img src="http://img01.taobaocdn.com/imgextra/i1/86719988/T20qpBXmFMXXXXXXXX_!!86719988.gif" border="0"></a><img title="" alt="" src="http://img02.taobaocdn.com/imgextra/i2/86719988/T2PdhIXmpbXXXXXXXX_!!86719988.gif" usemap="#elalakeMap" border="0"><map name="elalakeMap"><area shape="RECT" coords="1,1,22,22" href="http://fuwu.taobao.com/service/service.htm?service_id=347">
<a href="go.php?id=123456" target="_blank"><img src="http://img01.taobaocdn.com/imgextra/i1/86719988/T20qpBXmFMXXXXXXXX_!!86719988.gif" border="0"></a><img title="" alt="" src="http://img02.taobaocdn.com/imgextra/i2/86719988/T2PdhIXmpbXXXXXXXX_!!86719988.gif" usemap="#elalakeMap" border="0"><map name="elalakeMap"><area shape="RECT" coords="1,1,22,22" href="http://fuwu.taobao.com/service/service.htm?service_id=347">
<a href="#" target="_blank">aa</a>
<a href="#">aa</a>
我用的是面向对象写的 ,貌似里面不支持这个函数啊,我是把foo放到一个静态方法中了,但是如果直接把foo换成静态方法 不行啊static function showdescurl($url){
if(strpos($url[1],'id') !==false){
preg_match('/id=(\d+)/i',$url[1],$ar);
return '<a href="go.php?id='.$ar[1].'"';
}else{
return '<a href="#"';
}
}
$str= preg_replace_callback('/<a\s+href="(.*?)"/s','code::showdescurl()',$str);
其中“code::showdescurl()”的 code是类名,showdescurl()是静态方法
$str= preg_replace_callback('/<a\s+href="(.*?)"/s','code::showdescurl()',$str);
其中“code::showdescurl()”的 code是类名,showdescurl()是静态方法
array(类, 方法)
示例class T {
function parse($s) {
echo preg_replace_callback('/(.)(.)/', array('T', 'foo'), $s);
}
static function foo($r) {
return $r[2].$r[1];
}
}$p = new T;
$p->parse('abcd1234');