在PHP中使用正则表达式查找子域

时间:2009-02-11 03:45:55

标签: php regex pcre

很抱歉,如果这不是一个适合作为堆栈溢出问题的挑战,但我对正则表达式有点新意。

我的问题是,对于以下所有示例,返回字符串“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,我编辑了我的问题,我最初的意思,但忘了写,是否可以在没有任何子域的情况下工作 - 它会返回空刺痛或空白

4 个答案:

答案 0 :(得分:4)

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 />";
?>

答案 1 :(得分:3)

以下正则表达式会在完全停止(子域)和域的其余部分之前捕获任何字符串:

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

我认为不需要正则表达式。通过句号分割并获得第一个元素会更容易:

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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