2012-09-10 18 views
14

Attribuite stringhe URI come:Il modo migliore per estrarre ultimo segmento di URI in Ruby

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

Qual è il modo più elegante in Ruby per afferrare la abc alla fine di questi URI?

+4

split ('/'). Last? – oldergod

+3

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

+0

@muistooshort come lo faresti? prendendo tutto dall'ultimo '/' prima del primo '?'? – oldergod

risposta

44

vorrei usare una vera e propria parser URI come quello del URI module per ottenere il percorso dall'URI. Poi dividerlo a / e ottenere l'ultima parte di esso:

require 'uri' 

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

non funziona per me con l'url mu dato. – oldergod

+0

@oldergod Allora cosa ottieni? – Gumbo

+0

@muistooshort È possibile utilizzare 'path.chomp ('/')' per rimuoverli prima della divisione. – Gumbo

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

o

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

Questo sembra essere il modo più semplice e pulito di farlo .. – Qasim

2

Prova questi:

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

O

last = File.basename(url) 
2

Dalla riga di comando del Terminale:

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

da dentro la vostra fonte .RB:

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

funziona bene con tutto il legale che hai avuto.

Se non si utilizza URI.parse(), qualsiasi parametro dell'url verrà erroneamente considerato come l'ultimo segmento dell'URI.