繁体   English   中英

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

[英]Find out subdomain using Regular Expression in PHP

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

我的问题是,下面所有示例返回字符串“ 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']变量中查找当前页面的子域。

提前谢谢你,titel

编辑说明:对不起,混乱和自负,我编辑了我的问题,最初的意思是,但我忘了写了,这完全可以在没有任何子域的情况下工作-在这种情况下,它将返回一个空的字符串或NULL

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

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

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

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

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

如果要使用preg_replace(),则:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM