dominio regex dividido

Tengo algunos dominios que quiero dividir, pero no puedo entender la expresión regular …

Yo tengo:

  • http://www.google.com/tomato
  • http://int.google.com
  • http://google.co.uk

Dado cualquiera de estos, estoy tratando de extraer google solamente. ¿Algunas ideas?

Usted puede hacer esto en una mejor apuesta. La última parte de la URL es siempre el TLD (y la raíz opcional). Y básicamente estás buscando cualquier palabra anterior que tenga más de 2 letras:

 $url = "http://www.google.co.uk./search?q=.."; preg_match("#http:// (?:[^/]+\.)* # cut off any preceeding www* ([\w-]{3,}) # main domain name (\.\w\w)? # two-letter second level domain .co \.\w+\.? # TLD (/|:|$) # end regex with / or : or string end #x", $url, $match); 

Si esperas más dominios de segundo nivel (.com ¿quizás?), Agrega otro \w . Pero esto no es muy genérico, en realidad necesitaría una lista para los TLD si se permitiera.

¿Por qué intentas usar expresiones regulares? Hay muchas funciones nativas disponibles para ti, tales como:

 $host = parse_url($url, PHP_URL_HOST); 

actualizar, pruébelo, puede que necesite una mejora pero es mejor que Regex imo

 function determainDomainName($url) { $hostname = parse_url($url, PHP_URL_HOST); $parts = explode(".",$hostname); switch(count($parts)) { case 1: return $parts[0]; //has to be a .com etc break; case 2: if($parts[1] == "www") //The most common subdomain { return $parts[2]; //Bypass Subdomain / return next segment } if($parts[2] == "co") //Possible in_array here for multiples, but first segment of double barrel tld { return $parts[1]; //Bypass double barrel tld's } break; default: //Have a guess //I bet the longest word is the domain :) usort($parts,"mysort"); return $parts[0]; /* here we just order the array by the longest word so google will always come above the following com,co,uk,www,cdn,ww1,ww2 etc */ break; } } function mysort($a,$b){ return strlen($b) - strlen($a); } 

Agrega las siguientes 2 funciones a tus bibliotecas, etc.

Entonces use así:

 $urls = array( 'http://www.google.com/tomato', 'http://int.google.com', 'http://google.co.uk' ); foreach($urls as $url) { echo determainDomainName($url) . "\n"; } 

Todos se harán eco de google

ver @ http://codepad.org/pA5KWckb

La respuesta aquí podría ser lo que estás buscando.

Obtención de partes de una URL (Regex)

 $ res = preg_replace ("/^(http:\/\/)([a-z_\-◆+\.)*([a-z_\-◆+)\.(com|co.uk|net) \ /.*$/ im "," \ $ 3 ", $ in);

Añade tantos finales como sabes

Edición: cometió un error 🙁