2010-12-14 30 views
2

我想借此链接..如何将此链接与Rails互换?

http://www.youtube.com/watch?v=4lzi_3SM9-o 

,把它变成这样:

http://www.youtube.com/v/4lzi_3SM9-o 

要做到这一点,我需要一些方法来捕捉watch?v=v/

其切换我想在我的模型中使用def tube_link

任何想法?

回答

3

无需正则表达式,只需使用字符串替换:

url["watch?v="] = "v/" 

予以警告,你可能会得到一个指标差,如果你的东西指数是不是的字符串中。(有关详细信息,请参阅here。)

编辑:像这样的东西可能更可读(更可靠):

newUrl = oldUrl.gsub("watch?v=", "v/") 
+0

哇有趣。谢谢你! – Trip 2010-12-14 21:43:32

+0

你的第一个解决方案唯一的问题是,如果'url'不包含'watch?v =',那么你很可能会得到一个错误。 ('IndexError:字符串不匹配'在我这里,但可能取决于你的设置)。这使gsub成为更好的选择,因为如果找不到模式,gsub将不会执行任何操作。 – 2010-12-14 22:03:54

+0

@Brett Bender:哦,非常好。我将编辑答案以反映这一点。 – 2010-12-14 22:21:34

4
"http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub("watch?v=", "v/") 
2

您应该替换单引号双引号。这将节省您的时间

t1 = Time.now 
for i in 1..100000 
    "http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub("watch\?v=", "v/") 
end 
t2 = Time.now 
p t2-t1 

>ruby test.rb 
1.173 

t1 = Time.now 
for i in 1..100000 
"http://www.youtube.com/watch?v=4lzi_3SM9-o".gsub('watch\?v=', 'v/') 
end 
t2 = Time.now 
p t2-t1 

>ruby test.rb 
0.406 

1.173比。 0.406

+0

哇!疯!这是为什么? – Trip 2010-12-15 17:09:26

+0

当你用双引号写字符串时,ruby会进行字符串插值,这会减慢进程的速度。 – crazycrv 2010-12-16 04:52:23