http://detail.tmall.com/item.htm?id=18796056163
http://item.taobao.com/item.htm?spm=a220z.1000881.0.82&id=19150004171
http://item.taobao.com/item.htm?id=16181772778这样的链接保留id=.... 的部分,其他都替换成
javascrpit:clickItem("18796056163");
javascrpit:clickItem("19150004171");
javascrpit:clickItem("16181772778");

解决方案 »

  1.   

    这么有规律的URL,用explode,就可以了。参考http://www.php.net/manual/zh/function.explode.php$part = explode('id=','http://detail.tmall.com/item.htm?id=18796056163');
    echo $part[1];
      

  2.   


    if(preg_match("/id=[\d]+$/",$url,$result)) {
           echo $result[1];
    }   
      

  3.   

    谢谢上面两位热心人啊,刚才没有表达清楚,应该是在网页中把那样的链接
    <a target="_blank" href="http://detail.tmall.com/item.htm?id=4476817718"></a>
    </div>
    ......
    <div class="desc">
    <a target="_blank" href="http://detail.tmall.com/item.htm?id=4285064738" class="permalink" style="">描述</a></div>=======分割线========把有颜色标记的href部分,替换成这样的<a target="_blank" href="javascrpit:clickItem('4476817718')"></a>
    </div>
    ......
    <div class="desc">
    <a target="_blank" href="javascrpit:clickItem('4285064738')" class="permalink" style="">描述</a></div>
      

  4.   

    $s=<<<txt
    <a target="_blank" href="http://detail.tmall.com/item.htm?id=4476817718"></a>
    </div>
    ......
    <div class="desc">
    <a target="_blank" href="http://detail.tmall.com/item.htm?id=4285064738" class="permalink" style="">描述</a></div>
    txt;
    echo preg_replace('/href=".+?id=(\d+)"/is',"href=\"javascrpit:clickItem('$1')\"",$s);
      

  5.   

    谢谢楼上帮助!刚刚拿到实际情况中测试了一下,如果href后面是其他网址的话(不显示1),或者是?后面带有多个参数的模式(不显示2),会出现不能显示的情况。
    这时候需要如果item.htm? 匹配后面参数id的数值,如果href中没有id参数;那么链接保持原来的不变
    $s=<<<txt
    <a target="_blank" href="http://detail.tmall.com/item.htm?id=4476817718">好好</a>
    </div>
    <a target="_blank" href="http://www.sina.com.cn">不显示1</a>
    </div>
    <a target="_blank" href="http://detail.tmall.com/item.htm?spm=a2106.m874.1000384.d11&id=15393357623&pm2=1&source=dou&scm=1029.0.1.0">不显示2</a>
    </div>
    ......
    <div class="desc">
    <a target="_blank" href="http://detail.tmall.com/item.htm?id=4285064738" class="permalink" style="">描述</a></div>
    txt;
    echo preg_replace('/href=".+?id=(\d+)"/is',"href=\"javascrpit:clickItem('$1')\"",$s);
      

  6.   

    echo preg_replace_callback('/href="([^\"]+)"/is',"foo",$s);function foo($m){
           if(strpos($m[1],'id=')===false) return $m[0];
       preg_match('/id=(\d+)/',$m[1],$id);
       return "href=\"javascrpit:clickItem('$id[1]')\"";
    }
      

  7.   

    谢谢jordan102, 真是正则表达式牛人。这个函数的思路有点不解,我是做java出生的,能解释一下思路吗。另外测试的时候发现
    <a target="_blank" href="http://hello.tmall.com/good.html?id=99888889">你好2</a>
    会被替换成
    <a target="_blank" href="javascrpit:clickItem('99888889')">你好2</a>如果只有当链接中含有item.htm  和id= 的时候才替换链接该怎么写呢。
    http://hello.tmall.com/good.html?id=99888889   (不替换,没有出现item)
    http://hello.tmall.com/okitd.html?uid=099889999$id=99888889  (不替换,没有出现item)
    http://hello.tmall.com/item.html?cid=099889999 (不替换,没有出现id=)http://detail.tmall.com/item.htm?spm=a2106.m874.1000384.d11&id=15393357623&pm2=1&source=dou&scm=1029.0.1.0 (同时出现item.htm 和 id=替换)
    http://item.taobao.com/item.htm?id=9999999999999(同时出现item.htm 和 id=替换)再次谢谢。
      

  8.   

    foo修改一下 
    function foo($m){
           if(strpos($m[1],'id=')===false || strpos($m[1],'item')===false) return $m[0];
           preg_match('/id=(\d+)/',$m[1],$id);
           return "href=\"javascrpit:clickItem('$id[1]')\"";
    }
      

  9.   

    <?php
    $s = <<<TEXT
    <a target="_blank" href="http://hello.tmall.com/good.html?id=99888889">a</a>
    <a target="_blank" href="http://hello.tmall.com/item.html?id=99888889">b</a>
    <a target="_blank" href="http://hello.tmall.com/okitd.html?uid=099889999$id=99888889">c</a>
    <a target="_blank" href="http://hello.tmall.com/item.html?cid=099889999">d</a>
    <a target="_blank" href="http://detail.tmall.com/item.htm?spm=a2106.m874.1000384.d11&id=15393357623&pm2=1&source=dou&scm=1029.0.1.0">e</a>
    <a target="_blank" href="http://item.taobao.com/item.htm?id=9999999999999">f</a>
    TEXT;echo preg_replace('/href=".+?item\\.html?.*?[^\\w]id=([0-9]+)(.*)"/i','href="javascrpit:clickItem(\'$1\')"',$s);
    ?>