我必須提取http://www.youtube.com/watch?v=aNdMiIAlK0g來自此網址的視頻ID。任何人都知道如何使用gsub和正則表達式?如何使用gsub來提取YouTube視頻的ID?
1
A
回答
6
你可以用這個正則表達式的v
參數相匹配:
url[/(?<=[?&]v=)[^&$]+/] # => aNdMiIAlK0g
它從?
或&
的後視開始,並匹配所有內容,直到下一個&
或字符串的末尾。即使有其他參數,即使是以「v」結尾的參數,它也可以工作。
然而,一個更安全的方式做到這一點可能是使用URI類:
require 'uri'
query_string = URI.parse(url).query
parameters = Hash[URI.decode_www_form(query_string)]
parameters['v'] # => aNdMiIAlK0g
2
這是它:
ruby-1.9.2-p0 > "http://www.youtube.com/watch?v=aNdMiIAlK0g"[/v=([^&]+)/, 1]
=> "aNdMiIAlK0g"
(雖然你可能想使用URI庫獲取查詢部分,並使用&
割裂開來,並使用值v
,因爲如果上面會感到困惑網址是像http://www.youtube.com/promo?for_tv=1,它將把它作爲v=1
)
+0
謝謝你,我試過這個並得到了結果:str.match(/ v =([\ w | - ] *)&* /)[1] – 2010-11-25 08:42:00
有人正試圖做同樣的事情在[這個問題](http://stackoverflow.com/questions/3903854/how-can-i-alter-this-regex-to-get-the-youtube-video-id-from-a-youtube-url-that-do) – 2010-11-25 11:41:33
有時可能會有像http:// youtu這樣的短url .be/aNdMiIAlK0g你可能會在這裏考慮 – 2014-09-10 10:26:26