正则表达式以获取URL的主域

时间:2010-12-07 15:41:10

标签: php regex

我之前从未使用过正则表达式,我想知道如何在PHP中编写一个获取URL域的正则表达式。例如: http://www.hegnar.no/bors/article488276.ece - > hegnar.no

6 个答案:

答案 0 :(得分:7)

您无需使用正则表达式完成此任务。

检查PHP的内置函数parse_url http://php.net/manual/en/function.parse-url.php

答案 1 :(得分:2)

如果您专门处理网址,请使用parse_url()

例如:

$url = "http://www.hegnar.no/bors/article488276.ece";
$url_u_want = parse_url($url, PHP_URL_HOST);

Docs

编辑: 取出www。面前,使用:

$url_u_want = preg_replace("/^www\./", "", $url_u_want);

答案 2 :(得分:2)

$page = "http://google.no/page/page_1.html";
preg_match_all("/((?:[a-z][a-z\\.\\d\\-]+)\\.(?:[a-z][a-z\\-]+))(?![\\w\\.])/", $page, $result, PREG_PATTERN_ORDER);

print_r($result);

答案 3 :(得分:1)

答案 4 :(得分:1)

$host = parse_url($url, PHP_URL_HOST);
$host = array_reverse(explode('.', $host));
$host = $host[1].'.'.$host[0];

答案 5 :(得分:0)

当你使用parse_url,没有.com或.net等的$ url然后返回的结果是bannedadsense时,这就是问题,这意味着返回true,事实bannedadsense不是域。

$url = 'http://bannedadsense/isbanned'; // this url will return false in preg_match
//$url = 'http://bannedadsense.com/isbanned'; // this url will return domain in preg_match
$domain = parse_url($url, PHP_URL_HOST));
// return "bannedadsense", meaning this is right domain.

因此我们需要继续检查更多没有点扩展名的案例(.com,.net,.org等)

if(preg_match("/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i",$domain)) {
    echo $domain;
}else{
    echo "<br>";
    echo "false";
}