2012-09-10 21 views
14

cadenas URI dado como:mejor manera de extraer último segmento de la URI en Ruby

http://www.somesite.com/abc 
http://www.somesite.com/alpha/beta/abc 
http://www.somesite.com/alpha/abc 

Cuál es la forma más elegante de Ruby a agarrar el abc al final de estos URI?

+4

división ('/'). ¿Última? – oldergod

+3

@oldergod: 'http: //example.com/where? Is = pancakes/house% 3F'. –

+0

@muistooshort ¿cómo lo harías? tomando todo desde el último '/' antes del primer '?'? – oldergod

Respuesta

44

me gustaría utilizar un analizador URI adecuado como el de la URI module para obtener la ruta del URI. A continuación, se dividió en / y obtener la última parte de ella:

require 'uri' 

URI(uri).path.split('/').last 
+0

no funciona para mí con la url mu dio. – oldergod

+0

@oldergod Entonces, ¿qué obtienes? – Gumbo

+0

@muistooshort Puede usar 'path.chomp ('/')' para eliminarlos antes de dividirlos. – Gumbo

11
uri.split('/')[-1] 

o

uri.split('/').last 
+0

Esta parece ser la forma más limpia y simple de hacerlo ... – Qasim

2

Pruebe estos:

if url =~ /\/(.+?)$/ 
    last = $1 
end 

O

last = File.basename(url) 
2

Desde la línea de comandos de terminal:

ruby -ruri -e "print File.basename(URI.parse('$URI').path)" 

desde el interior de su fuente .rb:

require 'uri' 
theURI = 'http://user:[email protected]/foo/bar/baz/?lala=foo' 
uriPathTail = File.basename(URI.parse(theURI).path) # => baz 

funciona bien con cualquier ITUR legal que tengas.

Si no utiliza URI.parse(), cualquier parámetro de la url se tomará erróneamente como el último segmento del URI.

Cuestiones relacionadas