匹配缩短服务数组的URL

时间:2012-04-29 11:32:14

标签: php regex

考虑以下网址列表:

1 http://www.cnn.com/international/stories/423423532
2 http://www.traderscreener.com/blah
3 http://is.gd/fsdaGdfd3
4 http://goo.gl/23V534
5 http://bit.ly/54HFD
6 http://stackoverflow.com/question/ask

我想将缩短的网址扩展为原始格式:

$headers = get_headers($URL, 1);
if (!empty($headers['Location'])) {
  $headers['Location'] = (array) $headers['Location'];
  $URL = array_pop($headers['Location']);
}

但是,我需要将所有网址与一系列缩短服务匹配:

$array(
  'is.gd', 'bit.ly', 'goo.gl', 'wibi.us', 'tinyurl.com' // etc
)

在这种情况下,这必须过滤掉网址3,4和5.我相信最简单的方法是在***中抓取http://***/blah。由于我没有使用正则表达式的经验,所需的正则表达式是什么?或者有更好的方法来解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

preg_match('/^http:\/\/(is\.gd|bit\.ly|goog\.gl\|wibi\.us|tinyurl\.com)/i', $URL);

答案 1 :(得分:2)

到目前为止,最简单的方法是不建立黑名单。而是查询URL并查看它是否重定向。发送HEAD请求,并查找状态代码。如果是3xx,则会有重定向,因此您应该查找“位置”标题并将其用作新网址。

答案 2 :(得分:1)

如果您确定网址采用该格式,则可以使用explode()。

$url = "http://bit.ly/54HFD";
$tem = explode("/", $url);

$needles = array(
  'is.gd', 'bit.ly', 'goo.gl', 'wibi.us', 'tinyurl.com' // etc
)

foreach($needles as $needle) {
         $res = strpos($tem[2], $needle);
         if ($res !== false) DO_SOMEHING
}