【问题标题】:Find out subdomain using Regular Expression in PHP在 PHP 中使用正则表达式找出子域
【发布时间】:2010-10-06 19:50:21
【问题描述】:

很抱歉,如果这个挑战太小,不适合作为堆栈溢出问题,但我对正则表达式有点陌生。

我的问题是,对于下面的所有示例,返回字符串“token”的正则表达式是什么?

  • token.domain.com
  • token.domain.com/
  • token.domain.com/index.php
  • token.domain.com/folder/index.php
  • token.domain.com/folder/subfolder
  • token.domain.com/folder/subfolder/index.php
  • (编辑后添加)
  • domain.com
  • domain.com/

我试图在 preg_replace 函数中使用,以便从 $_SERVER['SERVER_NAME'] 变量中找出当前页面的子域。

提前谢谢你, 标题

编辑说明: 抱歉,混乱和 sebnow,我编辑了我的问题,我最初的意思是,但忘了写,这是否可以在没有任何子域的情况下工作 - 它会返回的情况空刺或NULL

【问题讨论】:

    标签: php regex pcre


    【解决方案1】:
    preg_replace('/^(?:([^\.]+)\.)?domain\.com$/', '\1', $_SERVER['SERVER_NAME'])
    

    编辑:以下输出对您有什么作用:

    <?php
        echo preg_replace('/^(?:([^\.]+)\.)?domain\.com$/', '\1', "sean.domain.com") . "<br />";
        echo preg_replace('/^(?:([^\.]+)\.)?domain\.com$/', '\1', "titel.domain.com") . "<br />";
        echo preg_replace('/^(?:([^\.]+)\.)?domain\.com$/', '\1', "domain.com") . "<br />";
    ?>
    

    【讨论】:

    • :(不幸的是,您描述的解决方案似乎不适用于我的情况
    • 它现在可以工作了,我想我在传递脚本以使用我的实际域时拼错了一些东西。无论如何,非常感谢。康斯坦丁 TOVISI
    【解决方案2】:

    以下正则表达式将捕获句号(子域)和域的其余部分之前的任何字符串:

    ^([^.]+)\..*$
    

    我不认为正则表达式需要这样做。用句号分割并获得第一个元素会容易得多:

    list($subdomain, $rest) = explode('.', $_SERVER['SERVER_NAME'], 2);
    

    【讨论】:

      【解决方案3】:

      如果你想使用 preg_replace(),那么:

      preg_replace('/\..*/', '', $_SERVER['SERVER_NAME'])
      

      【讨论】:

        【解决方案4】:
        preg_match('@^([a-zA-Z0-9]*\.)?([a-zA-Z0-9]+)\.([a-zA-Z]{2,4})$@',$_SERVER["HTTP_HOST"], $matches);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-17
          • 1970-01-01
          • 2012-12-01
          • 2023-03-25
          • 1970-01-01
          相关资源
          最近更新 更多