2011-05-26 128 views
0

我有以下字符串:红宝石 - 从字符串中删除

src = "dav://w.lvh.me:3000/Home/Transit/file" 
host = "w.lvh.me:3000" 

我想获得是"/Home/Transit/file"使用这两个字符串

我想在src寻找host并删除它的第它出现的时间,以及它之前的一切,但我不确定如何做到这一点。或者也许有更好的方法?

任何帮助,将不胜感激!

回答

8

确实是有一个更好的办法:

require 'uri' 
src = "dav://w.lvh.me:3000/Home/Transit/file" 
src = URI.parse src 

src.path  # => "/Home/Transit/file" 

当有字符串中的空格,你必须通过逃逸/转义的额外步骤。幸运的是,这很简单:

require 'uri' 
src = "dav://w.lvh.me:3000/Home/Transit/Folder 144/webdav_put_request" 
src = URI.parse(URL.escape src) 

URL.unescape(src.path)  # => "/Home/Transit/Folder 144/webdav_put_request" 
+1

完美的答案。不是所有的东西都应该归结为正则表达式。你需要一个URI解析器来解析URI,而不是另一个正常表达式。 – meagar 2011-05-26 12:33:21

+0

我忘了问,如果'src'中有空格怎么办?例如,如果'src =“dav://w.lvh.me:3000/Home/Transit/Folder 144/webdav_put_request”' – 2011-05-26 13:08:34

+0

@ andrei-s,URI.parse会引发错误,在编辑时介绍了这种情况。 – 2011-05-26 14:23:56

2

这应该做的工作:

src = "dav://w.lvh.me:3000/Home/Transit/file" 
host = "w.lvh.me:3000" 
result = src.sub(/.*#{host}/, '') 
#=> "/Home/Transit/file"