Php 从字符串中提取url(无正则表达式)

Php 从字符串中提取url(无正则表达式),php,Php,我有一个包含url的字符串。我试图以最有效的方式从附加文本中提取url。到目前为止,我一直在使用explode,但我必须分解两次,然后重建url。Regex还不是我主导的东西,所以我把它排除在外(除非它是最好的解决方案)。有没有一种方法可以一步提取url $url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjA

我有一个包含
url
的字符串。我试图以最有效的方式从附加文本中提取
url
。到目前为止,我一直在使用explode,但我必须分解两次,然后重建url。Regex还不是我主导的东西,所以我把它排除在外(除非它是最好的解决方案)。有没有一种方法可以一步提取url

$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$strip1  = explode( '&', $url );
$strip2  = explode('=', $strip1[0]);
$result =  $strip2[1].'='.$strip2[2];
结果:

http://www.somesite.com/sites/pages/page?id=1545778

尝试这样做:使用preg\u split()

使用这个正则表达式$strip1

^((http):\/)?\/?([^:\/\s]+)((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?$
您将在url中获得一个节数组

丑陋的一步无正则表达式解决方案。 和更干净的两步变化

$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$start = strpos( $url, '=' ) + 1;
$result = substr( $url, $start, strpos( $url, '&' ) - $start );
echo $result;
稍微不那么难看的正则表达式解决方案。 两者都产生以下输出

http://www.somesite.com/sites/pages/page?id=1545778

从技术上讲,URL中的第二个
应该是URL编码的,但我们可以绕过它。使用获取查询,然后使用URL编码的版本替换
。在此之后,您将拥有一个可以使用解析的有效查询


@MaryCoding这可能会帮助您:)不幸的是,
split
已被弃用。谢谢,这非常简单,而且不涉及regex@MaryCoding这实际上是在使用正则表达式
/[=&]/
是一个正则表达式。看起来到目前为止,正则表达式似乎比使用explode的另一种方法更干净。
$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$result = substr( $url, strpos( $url, '=' ) + 1, strpos( $url, '&' ) - strpos( $url, '=' ) - 1 );
echo $result;
$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$start = strpos( $url, '=' ) + 1;
$result = substr( $url, $start, strpos( $url, '&' ) - $start );
echo $result;
$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";
$result = preg_replace( '/[^=]*=([^&]*).*/', '${1}', $url );
echo $result;
http://www.somesite.com/sites/pages/page?id=1545778
$query = parse_url($url, PHP_URL_QUERY);
$query = str_replace("?", urlencode("?"), $query);
parse_str($query, $params);
echo $params['q'];

// displays http://www.somesite.com/sites/pages/page?id=1545778
$url = "/url?q=http://www.somesite.com/sites/pages/page?id=1545778&sa=U&ei=EhHLVL_yJcb-yQSZ7oDgAg&ved=0CBMQFjAA&usg";

$strip3  = current(explode('&',end(explode('=', $url,2))));
print_r ($strip3);    //output  http://www.somesite.com/sites/pages/page?id=1545778