Intereting Posts
Скрипт для разбора электронных писем для вложений Закрытие соединения PDO Как удалить акценты и превратить буквы в «простые» символы ASCII? Как добавить индекс в 18 GB innodb таблицу mysql, не влияя на производительность? Как преобразовать почтовый индекс в Geolocation (широта и longitutde) с помощью Google Maps api? Как вы печатаете необработанные символы UTF-8 из их номеров? Регулярное выражение PHP не работает должным образом nginx redirect loop, удалите index.php из url Два идентичных POST-действия с jquery модальным экраном, один работает, а другой нет? Как выбрать первые 10 слов предложения? Symfony2: токен CSRF недопустим. Попробуйте повторно отправить форму Загрузка файла с помощью twig и Slim framework (версия 2) – PHP Как преобразовать таблицу DB с отношением родительского сына к многомерному массиву Определите, подключен ли посетитель к SSL на CloudFlare Pro PHP Comet. Как это сделать лучше?

Найти субдомен, используя регулярное выражение в PHP

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

Мой вопрос: какое регулярное выражение возвращает строку «токен» для всех приведенных ниже примеров?

  • 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'].

Заранее спасибо, тител

Редактирование примечания: Извините хаос и 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);