-1

我正在尝试确定一个正则表达式来从这个谷歌警报重定向中解析出内部 url

http://www.google.com/url?sa=X&q=http://weheartit.com/entry/29409069&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw

我需要做的是删除第一部分

http://www.google.com/url?sa=X&q=

而且我还会删除尾随字符串

&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw

所以我要结束的结束网址是

http://weheartit.com/entry/29409069

我只是想更新这个感谢您的帮助。这是 drupal 的链接模块中的一个问题,已修复

4

2 回答 2

1

仍然不清楚您要完成什么,无论是提取还是移除周围的部分,这并不难:

preg_match('#q=(http://[^&]+)#', $source, $result);
print $result[1];

否则:

= preg_replace('#^.+q=([^&]+).+$#', '$1', $source);

会工作。

再一次,替代方案在于parse_urlparse_str

于 2012-05-31T01:46:23.410 回答
1

如果您真的想手动将 URL 剥离,您可以...

$ cat parseurl.php 
#!/usr/local/bin/php
<?php

$url="http://www.google.com/url?sa=X&q=http://weheartit.com/entry/29409069&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw";

# Parts of this section could be replaced with parse_url()
$junk = explode("?", $url);
$parts = explode("&", $junk[1]);
$gvar = array();
foreach ($parts as $thisone) {
  $junk = explode("=", $thisone);
  $gvar[$junk[0]]=$junk[1];
}

print_r($gvar);

printf("Embedded URL: %s\n", $gvar["q"]);

$ ./parseurl.php 
Array
(
    [sa] => X
    [q] => http://weheartit.com/entry/29409069
    [ct] => ga
    [cad] => CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw
    [cd] => jRWL16jvo8k
    [usg] => AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw
)
Embedded URL: http://weheartit.com/entry/29409069
$ 

要使用 parse_url() 和 parse_str 执行此操作,您可能会使用以下内容:

<?php

$url="http://www.google.com/url?sa=X&q=http://weheartit.com/entry/29409069&ct=ga&cad=CAcQARgAIAEoATAAOABAo5aK_gRIAlgBYgVlbi1VUw&cd=jRWL16jvo8k&usg=AFQjCNGbJMqWtbCxpcJdu4PGD6RToU6NTw";

parse_str( parse_url($url, PHP_URL_QUERY), $gvar );
printf("Embedded URL: %s\n", $gvar['q']);

这绝对看起来是更简单的方法,但我会留下第一个版本,这样你就可以看到(可能)在“幕后”发生了什么。:-)

于 2012-05-31T02:08:34.117 回答