很抱歉,如果这不是一个适合作为堆栈溢出问题的挑战,但我对正则表达式有点新意。
我的问题是,对于以下所有示例,返回字符串“token”的正则表达式是什么?
我试图在preg_replace函数中使用,以便从$ _SERVER ['SERVER_NAME']变量中找出当前页面的子域。
提前谢谢你, 性标题
编辑说明抱歉混沌和sebnow,我编辑了我的问题,我最初的意思,但忘了写,是否可以在没有任何子域的情况下工作 - 它会返回空刺痛或空白
答案 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);