文字列内の 2 つの文字間のサブリンクを抽出するにはどうすればよいですか?
たとえば、YouTube の URL から動画 ID を抽出したいとします。
http://www.youtube.com/watch?v=UkzbRkPv4T4&feature=g-all-u
=
「 」と最初の「&
」記号の間のテキストを希望します。これは「 UkzbRkPv4T4
」になります。
文字列内の 2 つの文字間のサブリンクを抽出するにはどうすればよいですか?
たとえば、YouTube の URL から動画 ID を抽出したいとします。
http://www.youtube.com/watch?v=UkzbRkPv4T4&feature=g-all-u
=
「 」と最初の「&
」記号の間のテキストを希望します。これは「 UkzbRkPv4T4
」になります。
正規表現を処理したくない場合は、URLの解析にRubyの標準ライブラリの機能を利用できます。
url = "http://www.youtube.com/watch?v=UkzbRkPv4T4&feature=g-all-u"
video_id = CGI.parse(URI.parse(url).query)['v'][0]
require 'uri'
uri = URI("http://www.youtube.com/watch?v=UkzbRkPv4T4&feature=g-all-u")
uri.query
# => "v=UkzbRkPv4T4&feature=g-all-u"
URI.decode_www_form(uri.query)
# => [["v", "UkzbRkPv4T4"], ["feature", "g-all-u"]]
URI.decode_www_form(uri.query).map(&:last)
# => ["UkzbRkPv4T4", "g-all-u"]
URI.decode_www_form(uri.query).assoc("v").last
# => "UkzbRkPv4T4"
正規表現が必要です:
uri = 'http://www.youtube.com/watch?v=UkzbRkPv4T4&feature=g-all-u'
m = uri.match /v=(?<id>\w+)&/
if m
puts m[:id]
end
apneadiving のコメントを拡張するだけです。
>> url = "http://www.youtube.com/watch?v=UkzbRkPv4T4&feature=g-all-u"
=> "http://www.youtube.com/watch?v=UkzbRkPv4T4&feature=g-all-u"
>> md = url.match(/v=(.*)&/)
=> #<MatchData "v=UkzbRkPv4T4&" 1:"UkzbRkPv4T4">
>> md[1]
=> "UkzbRkPv4T4"