Нужно регулярное выражение, чтобы получить домен + поддомен - PullRequest
2 голосов
/ 22 января 2012

Так что я использую эту функцию здесь:

function get_domain($url)
{
  $pieces = parse_url($url);
  $domain = isset($pieces['host']) ? $pieces['host'] : '';
  if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) {
    return $regs['domain'];
  }
  return false;
}

$referer = get_domain($_SERVER['HTTP_REFERER']);

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

Скажем, настоящая проблема у меня сейчас. Когда люди ведут блог по примеру: myblog.blogger.com URL реферера будет просто blogger.com, что не идеально.

Так что, если кто-то может мне помочь, чтобы я мог получить включающий поддомен в качестве кода регулярного выражения для вышеприведенной функции, id очень ценю его!

Спасибо!

Ответы [ 2 ]

9 голосов
/ 22 января 2012

Это регулярное выражение должно соответствовать домену в строке, включая любые дублирующие домены:

/([a-z0-9|-]+\.)*[a-z0-9|-]+\.[a-z]+/

В переводе на грубый английский он работает следующим образом: «соответствует первой части строки, содержащей« sometextornumbers.sometext »», а также включать любое количество« некоторых текстовых номеров ».что может предшествовать этому.

См. это в действии здесь: http://regexr.com? 2vppk

Обратите внимание, что многострочные и глобальные флаги в этой ссылке доступны только для возможностичтобы соответствовать всему блоку тестового текста, поэтому вам не нужно, если вы передаете регулярное выражение только одну строку

0 голосов
/ 26 апреля 2018

Удачи с вышесказанным, поскольку доменные имена теперь содержат нелатинские символы.Они должны быть обработаны в эквивалентную, но уникальную ASCII, прежде чем регулярное выражение сможет работать надежно.См. RFC 3490 Интернационализация доменных имен в приложениях (IDNA) ... См. https://tools.ietf.org/html/rfc3490 с

. До сих пор не было стандартного метода для доменных имен, использующего символы
.вне репертуара ASCII.Этот документ определяет
интернационализированные доменные имена (IDN) и механизм, называемый
Интернационализация доменных имен в приложениях (IDNA), для обработки
их стандартным способом.В именах IDN используются символы, взятые из большого репертуара
(Unicode), но IDNA позволяет символам, не входящим в ASCII, быть
представленными с использованием только символов ASCII, уже разрешенных в так называемых
именах хостов сегодня.Это обратно совместимое представление
требуется в существующих протоколах, таких как DNS, так что IDN могут быть введены
без изменений в существующей инфраструктуре.IDNA
предназначена только для обработки доменных имен, а не для произвольного текста.

...