2012-09-10 18 views
14

danych napisów URI jak:Najlepszy sposób wyodrębnić ostatni segment URI w Ruby

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

Jaki jest najbardziej elegancki sposób w Ruby chwycić abc na końcu tych URI?

+4

Podział ("/"). Last? – oldergod

+3

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

+0

@muistooshort jak by to zrobić? biorąc wszystko od ostatniego '/' przed pierwszym '?'? – oldergod

Odpowiedz

44

chciałbym użyć właściwego parser URI podobny do jednego z URI module uzyskać ścieżkę z URI. Następnie podzielić ją na / i dostać ostatnią jego część:

require 'uri' 

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

nie działa dla mnie z url mu dał. – oldergod

+0

@oldergod Więc co otrzymasz zamiast tego? – Gumbo

+0

@muistooshort Możesz użyć 'path.chomp ('/')', aby usunąć je przed podziałem. – Gumbo

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

lub

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

To wydaje się być najczystszym, najprostszym sposobem robienia tego .. – Qasim

2

Spróbuj tych:

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

Albo

last = File.basename(url) 
2

Z linii poleceń terminala:

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

od wewnątrz .rb źródła:

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

to działa dobrze z jakimkolwiek prawem, jaki posiadałeś.

Jeśli nie użyjesz funkcji URI.parse(), dowolny parametr adresu URL zostanie nieprawidłowo pobrany jako ostatni segment identyfikatora URI.