【问题标题】:Determining a regular expression for url for drupal field为 drupal 字段确定 url 的正则表达式
【发布时间】:2012-06-05 06:38:49
【问题描述】:

我正在尝试确定一个正则表达式来从这个 google 警报重定向中解析出内部 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 的链接模块中的一个问题,已修复

【问题讨论】:

  • 我们对此有一些重复。正则表达式非常简单。而parse_urlparse_str 的替代方案更是如此。
  • 嗯,这对你来说可能超级简单,但我遇到了很多麻烦我能想到的最好的工作是 field_web_screenhot[ 'und'][0]['url']; $url = preg_replace('.*?(http)(.)(.)((?:\\/[\\w\\.\\-]+)+)', '', $url); $node->field_web_screenhot['und'][0]['url'] =$url;返回 ; } ?>
  • Extract URL from string的可能重复
  • 使用 edit link,而不是 cmets 来补充您的问题。

标签: php regex drupal


【解决方案1】:

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

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

否则:

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

会工作的。

同样,替代方案在于parse_urlparse_str

【讨论】:

  • 我安装了 drupal 7,我有一个链接模块字段,该字段由来自 google 的 rss 提要填充,提醒该字段中保存的 url 是 google 重定向 url,因为这就是 google 从提要返回的内容我有另一个模块将 url 格式化为不支持正确重定向的屏幕截图服务器的 url,因此我需要获取主 url 而不是带有重定向的 url,以便屏幕截图服务器正常工作对不起,我应该首先说谢谢你的帮助马里奥确实更有意义
  • 我正在做的是制作一个适用于我必须更改并保存新网址的字段的模块
【解决方案2】:

如果您真的想要手动将 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']);

这绝对看起来是更简单的方法,但我将保留第一个版本,以便您了解(可能)发生的“幕后”情况。 :-)

【讨论】:

  • 不要忘记 parse_str() 接受第二个参数,一个数组,解析后的变量将被插入其中。这消除了你的缺点。
  • 卫生署!对,你是,ghoti。我以前没看到。谢谢,我会更新我的答案。
  • 哇,非常感谢您的帮助,我现在正在制定如何将其与 drupal 一起使用。
  • 我认为可能行不通的不是 -- field_web_screenhot['und'][0]['url']; $url = parse_str(parse_url($url, PHP_URL_QUERY), $gvar); $node->field_web_screenhot['und'][0]['url'] =$url;返回; }
猜你喜欢
  • 2020-03-31
  • 2012-07-03
  • 2017-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-01-29
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多