Найти поддомен, используя регулярные выражения в PHP - PullRequest
3 голосов
/ 11 февраля 2009

Извините, если это слишком сложная задача, чтобы ее можно было использовать в качестве вопроса переполнения стека, но я вроде новичок в Регулярных выражениях.

У меня вопрос: каково регулярное выражение, которое возвращает строку «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 / папка / подпапка / index.php
  • (добавлено после редактирования)
  • domain.com
  • domain.com /

Я пытаюсь использовать внутри функции preg_replace, чтобы найти поддомен текущей страницы из переменной $ _SERVER ['SERVER_NAME'].

Заранее спасибо, Titel

Редактировать заметку: Извините, хаос и себов, я отредактировал свой вопрос, что я изначально имел в виду, но забыл написать, что это будет работать без какого-либо субдомена вообще - случай, в котором он вернет пустое жало или NULL

Ответы [ 4 ]

4 голосов
/ 11 февраля 2009
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 />";
?>
3 голосов
/ 11 февраля 2009

Следующее регулярное выражение будет захватывать любую строку перед полной остановкой (поддомен) и остальной частью домена:

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

Я не вижу необходимости в регулярных выражениях для этого. Было бы намного проще разделить точку и получить первый элемент:

list($subdomain, $rest) = explode('.', $_SERVER['SERVER_NAME'], 2);
0 голосов
/ 08 марта 2010
preg_match('@^([a-zA-Z0-9]*\.)?([a-zA-Z0-9]+)\.([a-zA-Z]{2,4})$@',$_SERVER["HTTP_HOST"], $matches);
0 голосов
/ 11 февраля 2009

Если вы хотите использовать preg_replace (), то:

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