【发布时间】:2010-11-25 19:36:02
【问题描述】:
我必须从这个 url 中提取 http://www.youtube.com/watch?v=aNdMiIAlK0g 视频 ID。有人知道如何使用 gsub 和正则表达式吗?
【问题讨论】:
-
有人在this question中尝试做同样的事情
-
有时可能会有像youtu.be/aNdMiIAlK0g 这样的短网址,您可以在这里考虑
我必须从这个 url 中提取 http://www.youtube.com/watch?v=aNdMiIAlK0g 视频 ID。有人知道如何使用 gsub 和正则表达式吗?
【问题讨论】:
您可以将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
【讨论】:
就是这样:
ruby-1.9.2-p0 > "http://www.youtube.com/watch?v=aNdMiIAlK0g"[/v=([^&]+)/, 1]
=> "aNdMiIAlK0g"
(尽管您可能希望使用 URI 库来获取查询部分并使用 & 拆分它们并使用 v 的值,因为如果 url 类似于 http://www.youtube.com/promo?for_tv=1 和它将作为v=1)
【讨论】: