web-dev-qa-db-ja.com

Ruby)でURIの最後のセグメントを抽出する最良の方法

次のようなURI文字列を指定します。

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

これらのURIの最後にあるabcを取得するRubyの最もエレガントな方法は何ですか?

21
Daniel May

RI module のような適切なURIパーサーを使用して、URIからパスを取得します。次に、それを/で分割し、最後の部分を取得します。

require 'uri'

URI(uri).path.split('/').last
55
Gumbo
uri.split('/')[-1] 

または

uri.split('/').last 
13
saihgala

これらを試してください:

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

または

last = File.basename(url)
4
matsko

ここでの回答で提案されているsplitの使用法はすべて合法ですが、私の意見では @ matskoの回答 がより明確なコードを読んでいます

last = File.basename(url)
2
mokagio

ターミナルコマンドラインから:

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

.rbソース内から:

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

それはあなたが持っていたどんな合法的なtheURIでもうまく機能します。

URI.parse()を使用しない場合、URLへのパラメーターはURIの最後のセグメントとして誤って取得されます。

2
juanfal

値が任意の軌道文字列+ URIの場合、以下の解決策が機能するはずです。

まず、文字列からURIを抽出します。

uri_string = URI.extract("Test 123 http://www.somesite.com/abc")

上記のコマンドは配列を返します

次に、を使用してURIの最後の部分を抽出します

uri_string[0].split('/').last

前提条件:require "uri"をRubyスクリプトに追加する必要があります

0