淘宝链接,可能有N个参数,想把商品ID匹配出来,链接类似于:1、http://item.taobao.com/item.htm?id=9523770399&ali_refid=a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77&ali_trackid=1_7bcdc59fb0c21ce96e901436b439fd772、http://item.taobao.com/auction/item_detail.htm?item_num_id=9523770399&ali_refid=a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77&ali_trackid=1_7bcdc59fb0c21ce96e901436b439fd773、http://item.taobao.com/item.htm?id=95237703994、http://item.taobao.com/auction/item_detail.htm?item_num_id=9523770399以上4个全是一个商品的链接,我想把id=和item_num_id=后面的数字匹配出来。

解决方案 »

  1.   

    没有使用正则表达式,感觉这样的速度应该比较快,测试过函数是可以的function getid($url){
    //手册说 explode()比正则表达式快
    $geturl=explode("&", $url);
    //获取数组的第一个下标
    $getitem=explode("=", $geturl[0]);
    //返回“=”后面的数值
    return $getitem[1];
    }
    嘿嘿。小弟菜鸟一枚,头一次在csdn发言,规矩都不懂,见谅。
      

  2.   

    怪我没说清楚,之所以要用正则是因为id=9523770399这个参数不见得就一定是第一个参数,也就说id=9523770399不一定是跟在?号后面的,参数有可能是打乱的,而我只要取出id=后面的数字。
      

  3.   

    觀察一下這幾條,不管是哪一個,他們具備一個共同點,那就是編號前邊都是"id="
    所以你可以用explode將其拆分為數組,然後針對拆分後的結果進行處理,判斷裏邊是否有&符號或=符號
    如果有則繼續explode最後就能出結果
      

  4.   


    $url = 'http://item.taobao.com/item.htm?id=9523770399&ali_refid=a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77&ali_trackid=1_7bcdc59fb0c21ce96e901436b439fd77';preg_match("/([a-z]+:\/\/)?([\w-]+)\.([\w-]+)(\.[\w-]+)*(\/)([\w-]+)\.([\w-]+)\?([\w-]+)=\d{0,}/",$url, $matches);
    =>
    array(9) {
      [0]=>
      string(45) "http://item.taobao.com/item.htm?id=9523770399"
      [1]=>
      string(7) "http://"
      [2]=>
      string(4) "item"
      [3]=>
      string(6) "taobao"
      [4]=>
      string(4) ".com"
      [5]=>
      string(1) "/"
      [6]=>
      string(4) "item"
      [7]=>
      string(3) "htm"
      [8]=>
      string(2) "id"
    }
      

  5.   

    id和item_num_id是有区别的  需要改正则
      

  6.   

    正则不是万能的!
    处理此类问题并不需要用正则表达式,php 已经提供了良好的函数
    $ar = array(
    'http://item.taobao.com/item.htm?id=9523770399&ali_refid=a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77&ali_trackid=1_7bcdc59fb0c21ce96e901436b439fd77',
    'http://item.taobao.com/auction/item_detail.htm?item_num_id=9523770399&ali_refid=a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77&ali_trackid=1_7bcdc59fb0c21ce96e901436b439fd77',
    'http://item.taobao.com/item.htm?id=9523770399',
    'http://item.taobao.com/auction/item_detail.htm?item_num_id=9523770399'
    );foreach($ar as $v) {
      $u = parse_url($v);
      parse_str($u['query'], $var);
      print_r($var);
    }Array
    (
        [id] => 9523770399
        [ali_refid] => a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77
        [ali_trackid] => 1_7bcdc59fb0c21ce96e901436b439fd77
    )
    Array
    (
        [item_num_id] => 9523770399
        [ali_refid] => a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77
        [ali_trackid] => 1_7bcdc59fb0c21ce96e901436b439fd77
    )
    Array
    (
        [id] => 9523770399
    )
    Array
    (
        [item_num_id] => 9523770399
    )在这样的结果中获取你需要的东西不是很简单吗?
      

  7.   

    楼主几位大哥不错,其实用正则效率挺低的不过lz估计只想要正则了,那我就写个比较土的正则吧?记的结贴<?php
    $str="http://item.taobao.com/item.htm?id=9523770399";
    $mode="/\?item_num_id=(\d*)|&item_num_id=(\d*)|\?id=(\d*)|&id=(\d*)/";
    preg_match($mode,$str,$arr);$arr=array_diff($arr, array(null));
    echo $arr=implode(array_diff($arr, array($arr[0])));
    ?>
      

  8.   

    正则的效率反而慢,虽然楼上的也是可以的,我帮你把xuzuning代码再些的清楚些<?php
    $ar = array(
    'http://item.taobao.com/item.htm?id=9523770399&ali_refid=a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77&ali_trackid=1_7bcdc59fb0c21ce96e901436b439fd77',
    'http://item.taobao.com/auction/item_detail.htm?item_num_id=9523770399&ali_refid=a3_619362_1007:1102373933:7:46702465U84y78608587678s868v3I:7bcdc59fb0c21ce96e901436b439fd77&ali_trackid=1_7bcdc59fb0c21ce96e901436b439fd77',
    'http://item.taobao.com/item.htm?id=9523770399',
    'http://item.taobao.com/auction/item_detail.htm?item_num_id=9523770399'
    );foreach($ar as $v) {
      $u = parse_url($v);
      parse_str($u['query'], $var);
      echo empty($var['id'])?  $var['item_num_id'] :  $var['id'];//获取具体的数字
      echo "<br>";//跳行
    }  
    ?>