2010-07-24 24 views
6

Estoy tratando de construir una expresión regular para extraer un dominio dado una url.¿Qué expresiones regulares puedo usar para obtener el nombre de dominio de una url en Ruby?

para:

http://www.abc.google.com/ 
http://abc.google.com/ 
https://www.abc.google.com/ 
http://abc.google.com/ 

debe dar:

abc.google.com 
+0

En términos de DNS, 'www.example.com' no necesariamente tiene que apuntar a la misma máquina que' ejemplo.com'. –

+0

www.example.com y example.com ¿podrían ser dos sitios diferentes? – anusuya

+0

Claro que pueden. Es una convención no hacer eso, pero nada le impide establecer registros A distintos en esos dos dominios en DNS. –

Respuesta

25
URI.parse('http://www.abc.google.com/').host 
#=> "www.abc.google.com" 

No es una expresión regular, pero probablemente más robusta que cualquier cosa que vienen hasta aquí.

URI.parse('http://www.abc.google.com/').host.gsub(/^www\./, '') 

Si desea eliminar el www., así que esto funcionará sin levantar ningún error si el www. no está allí.

+0

Quiero eliminar el www. también – anusuya

+0

Esta no es la solución más robusta. Regex puede ser más confiable, especialmente si las personas olvidan incluir "http" en el URI. – Subimage

+0

Es bastante robusto si puede asumir la integridad de los datos, por supuesto. –

1

No sé mucho acerca de rubí, pero este patrón de expresión le da los últimos 3 partes de la URL con exclusión de la barra al final con un mínimo de 2 caracteres por parte

([\w-]{2,}\.[\w-]{2,}\.[\w-]{2,})/$ 
+0

Debe ser '([\ w -] {2,} \. [\ W -] {2,} \. [\ W -] {2,}) \/$'. +1 sin embargo. – Sarfraz

+0

¿Qué ocurre con (? <= //) [^ /] + –

-1

Su pregunta es un poco vaga. ¿Puede dar una especificación precisa de qué es exactamente que desea hacer? (Preferible con una suite de pruebas). En este momento, toda su pregunta dice que desea un método que siempre devuelva 'abc.google.com'. Eso es fácil:

def extract_domain 
    return 'abc.google.com' 
end 

Pero eso probablemente no es lo que usted quiso decir & hellip;

Además, dices que necesitas un Regexp. ¿Por qué? ¿Qué ocurre con, por ejemplo, usar la clase URI? Después de todo, el análisis y la manipulación de URI es exactamente para lo que está hecho.

require 'uri' 

URI.parse('https://abc.google.com/').host # => 'abc.google.com' 

Y, por último, usted dice que es "tratar de extraer un dominio", pero nunca se especifique lo que quiere decir por "dominio". Parece que en ocasiones significa el FQDN y, en ocasiones, partes del FQDN que caen aleatoriamente, pero, ¿de acuerdo con qué reglas? Por ejemplo, para el FQDN abc.google.com, el nombre de dominio es google.com y el nombre de host es abc, pero desea que devuelva abc.google.com que no es solo el nombre de dominio sino completo FQDN. ¿Por qué?

+0

podría haber enmarcado el qn incorrectamente. Lo que intento hacer es eliminar el "http: // www" principal. y cosa de siempre después de .com dado que "http://www.google.com/" debería dar google.com "http://www.abc.google.com/" debe devolver abc.google.com – anusuya

+0

¿Por qué quiere obtener abc.google.com para http://abc.google.com/ pero google.com para http://www.google.com/? ¿Qué hace que el 'www' sea especial? Es solo una convención que los servidores http por lo general están en el host llamado www pero no tiene por qué ser así. –

+0

sí. utilizo un servicio web cuyas tiras de http y www forman parte del nombre del sitio. para comparar los resultados, necesito hacer lo mismo antes de hacerlo – anusuya

0

es posible que pueda utilizar el domain_name gem para este tipo de trabajo. Del archivo README:

require "domain_name" 
host = DomainName("a.b.example.co.uk") 
host.domain   #=> "example.co.uk" 
Cuestiones relacionadas