有许多地址,规律不定,唯一的共性是全部由2个http://组成,比如
http://www.aaa.com/1234/dafdg/index?id=http://www.bbb.com/3456/efgh/
http://www.ccc.net/5678/index?key=http://ddd.org/7890/index.php
... ...
如何用正则,批量获取第二个http://后面的网址?如:
www.bbb.com/3456/efgh/
ddd.org/7890/index.php
谢谢。

解决方案 »

  1.   

    $str="http://www.aaa.com/1234/dafdg/index?id=http://www.bbb.com/3456/efgh/";
    $matchs = array();
    preg_match("#^http://.+http://(.+)$#",$str,$matchs);
    echo $matchs[1];
      

  2.   

    $url = 'http://www.aaa.com/1234/dafdg/index?id=http://www.bbb.com/3456/efgh/';$array = explode("http://", $url);print_r($array[2]);
      

  3.   

    说明:
    1、用http://作为分隔符生成数组
    2、获取第二个后面的内容
    3、在开发机器上测试通过
    4、为防止有的url没有两个http://的情况,可以对数组大小进行判断
      

  4.   

    这样也行,其实这样的效率要比正则高,当然前提是一定要有2个HTTP://楼上说的贪魅问题,其实后面加个?就变成非了
    $str="http://www.aaa.com/1234/dafdg/index?id=http://www.bbb.com/3456/efgh/"; $matchs = array(); preg_match("#^http://.+http://(.+?)$#",$str,$matchs); echo $matchs[1];
    加个?立刻变成非贪霉
      

  5.   

    这样呢  [^?]+.+http://(.+)
      

  6.   

    一个URL的问题原来有这么大的学问。
    厉害,这里高手如云啊~~况且在万能的斑竹还没有浮现的情况之下……
      

  7.   

    我觉得为啦严谨  应该写成这样 大家看看
    ^http://(.+?)=http://(.*)$