2009-02-11 21 views
3

找出子域名對不起,如果這對於適合作爲堆棧溢出問題的挑戰來說太少,但我對正則表達式有所瞭解。使用PHP中的正則表達式找出子域使用PHP

我的問題是,什麼是正則表達式返回字符串「令牌」的所有示例在下面?

  • token.domain.com
  • token.domain.com/
  • token.domain.com/index.php
  • token.domain.com/folder/index.php
  • 令牌.domain.com /文件夾/子文件夾
  • token.domain.com/folder/subfolder/index.php
  • (編輯後加入)
  • domain.com
  • domain.com/

我試着到的preg_replace函數中使用,以找出當前頁面從$ _ SERVER [「SERVER_NAME」]變量的子域。

謝謝你在前進, Titel的

編輯注:對不起混亂和sebnow,我編輯我的問題,我最初的意思,卻忘了寫,有人認爲這將沒有任何的子域在所有的工作 - 情況下,它會返回一個空的刺痛或NULL

回答

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

:(不幸的是,你所描述的解決方案似乎並不適用於我的情況 – titel 2009-02-11 04:18:09

0

如果你想使用的preg_replace(),則:

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

下面的正則表達式將一個完整的STO之前捕獲任何字符串p(子域)和域的其餘部分:

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

我看不到需要使用正則表達式來完成此操作。這將是更容易被完全停止分裂並獲得的第一個元素:

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