Извините, если это слишком мало для того, чтобы быть подходящим в качестве вопроса переполнения стека, но я немного новый для регулярных выражений.
Мой вопрос: какое регулярное выражение возвращает строку «токен» для всех приведенных ниже примеров?
Я пытаюсь использовать внутри функции preg_replace, чтобы узнать субдомен текущей страницы из переменной $ _SERVER ['SERVER_NAME'].
Заранее спасибо, тител
Редактирование примечания: Извините хаос и sebnow, я редактировал свой вопрос, что я изначально имел в виду, но забыл написать, было то, что это будет работать без какого-либо субдомена – случай, когда он вернет пустое жало или 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_replace (), то:
preg_replace('/\..*/', '', $_SERVER['SERVER_NAME'])
preg_match('@^([a-zA-Z0-9]*\.)?([a-zA-Z0-9]+)\.([a-zA-Z]{2,4})$@',$_SERVER["HTTP_HOST"], $matches);