Expressão regular para obter o domínio principal de uma URL

Eu nunca usei o regex antes e eu queria saber como escrever uma expressão regular em PHP que recebe o domínio do URL. Por exemplo: http://www.hegnar.no/bors/article488276.ece -> hegnar.no

Apenas use parse_url() se você estiver lidando especificamente com URLs.

Por exemplo:

 $url = "http://www.hegnar.no/bors/article488276.ece"; $url_u_want = parse_url($url, PHP_URL_HOST); 

Docs

EDITAR: retirar o www. Em frente, use:

 $url_u_want = preg_replace("/^www\./", "", $url_u_want); 

Você não precisa usar o regexp para esta tarefa.

Verifique a function incorporada do PHP, parse_url http://php.net/manual/en/function.parse-url.php

 $page = "http://google.no/page/page_1.html"; preg_match_all("/((?:[az][az\\.\\d\\-]+)\\.(?:[az][az\\-]+))(?![\\w\\.])/", $page, $result, PREG_PATTERN_ORDER); print_r($result); 
 $host = parse_url($url, PHP_URL_HOST); $host = array_reverse(explode('.', $host)); $host = $host[1].'.'.$host[0]; 

Vejo

PHP Regex para extrair subdomínios de domínios arbitrários

e

Javascript / Regex para encontrar apenas o nome do domínio raiz sem subdomínios

Este é o problema quando você usa parse_url, o $ url sem .com ou .net ou etc, então o resultado retornado é bannedadsense , isso significa retornar verdadeiro, o fato de bannedadsense não é um domínio.

 $url = 'http://bannedadsense/isbanned'; // this url will return false in preg_match //$url = 'http://bannedadsense.com/isbanned'; // this url will return domain in preg_match $domain = parse_url($url, PHP_URL_HOST)); // return "bannedadsense", meaning this is right domain. 

Para que possamos continuar a verificar mais um caso sem extensão de ponto (.com, .net, .org, etc.)

 if(preg_match("/^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9](?:\.[a-zA-Z]{2,})+$/i",$domain)) { echo $domain; }else{ echo "
"; echo "false"; }