3

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

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

  • token.domain.com
  • token.domain.com/
  • token.domain.com/index.php
  • token.domain.com/folder/index.php
  • token.domain.com/文件夹/子文件夹
  • token.domain.com/folder/subfolder/index.php
  • (编辑后添加)
  • 域名.com
  • domain.com/

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

提前谢谢你,标题

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

4

4 回答 4

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 />";
?>
于 2009-02-11T04:12:13.593 回答
3

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

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

不过,我认为不需要正则表达式来执行此操作。用句号分割并获得第一个元素会容易得多:

list($subdomain, $rest) = explode('.', $_SERVER['SERVER_NAME'], 2);
于 2009-02-11T04:05:19.773 回答
0

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

preg_replace('/\..*/', '', $_SERVER['SERVER_NAME'])
于 2009-02-11T03:51:46.547 回答
0
preg_match('@^([a-zA-Z0-9]*\.)?([a-zA-Z0-9]+)\.([a-zA-Z]{2,4})$@',$_SERVER["HTTP_HOST"], $matches);
于 2010-03-08T16:41:06.030 回答