我希望尝试确定一个正则表达式来解析此谷歌警报重定向中的内部网址
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链接模块中的一个问题,现已修复
仍然不清楚您要完成什么,无论是提取还是移除周围的部分,这并不难:
preg_match('#q=(http://[^&]+)#', $source, $result);
print $result[1];
否则:
= preg_replace('#^.+q=([^&]+).+$#', '$1', $source);
会工作。
- 另请参阅开源正则表达式好友替代品和在线正则表达式测试以获取一些有用的工具,或 RegExp.info 以获取更好的教程。
同样,替代方案在于parse_url
和parse_str
如果您真的想手动将 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']);
这绝对是更简单的方法,但我会留下第一个版本,以便您可以看到"引擎盖下"(可能)发生的事情。 :-)