【问题标题】:Regular expression to get the main domain of a URL获取 URL 主域的正则表达式
【发布时间】:2010-12-07 15:41:09
【问题描述】:

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

【问题讨论】:

标签: php regex


【解决方案1】:

您不需要为此任务使用正则表达式。

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

【讨论】:

  • 当 URL 没有 www 时返回 null。或http
  • 函数。如果 URL 没有 www,则返回 null。
  • echo parse_url('google.com', PHP_URL_HOST); == www.google.com 然后您可以使用 Andreas 的解决方案删除 www。
【解决方案2】:

如果您专门处理 URL,请使用 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);

【讨论】:

  • 太完美了。它只是不会删除 www。有什么办法吗?
  • 但是如果它没有 www 怎么办?从一开始,它就行不通!
  • 你想在第一个 .?如果你没有www。那东西根本不会运行并让您拥有任何东西,这很好(即,您不想从 subdomain.hegnar.no 中删除子域,对吗?)
  • aha 是的,明白了;)我必须先检查一下,然后再写 $url_u_want = parse_url($url, PHP_URL_HOST);否则我会破坏我的链接。对吗?
  • erh 不,请先用不同的 url 测试我的解决方案,你会看到。
【解决方案3】:
$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);

【讨论】:

  • 我可以删除 www.也一样?
  • 是的,print_r(str_replace('www.', '', $result));如果万维网。找到了。
【解决方案4】:
$host = parse_url($url, PHP_URL_HOST);
$host = array_reverse(explode('.', $host));
$host = $host[1].'.'.$host[0];

【讨论】:

    【解决方案5】:
    【解决方案6】:

    这是你使用 parse_url 时的问题,$url 没有 .com 或 .net 等然后返回的结果是 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";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 2011-10-12
      • 2022-11-18
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多