我有
http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg
如何返回
uploads/users/15/photos/12/foo.jpg
答案 0 :(得分:3)
最好使用属于Ruby标准库的URI parsing 而不是尝试一些可能会或可能不会采取每一个的正则表达式 可能的特殊情况。
require 'uri'
url = "http://foo.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg"
path = URI.parse(url).path
# => "/uploads/users/15/photos/12/foo.jpg"
path[1..-1]
# => "uploads/users/15/photos/12/foo.jpg"
无需重新发明轮子。
答案 1 :(得分:2)
"http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg".sub("http://foobar.s3.amazonaws.com/","")
将是一个显式版本,其中sub
用空字符串构成主页部分。
对于更普遍的方法,我会推荐一个正则表达式,类似于这个:
string = "http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg"
string.sub(/(http:\/\/)*.*?\.\w{2,3}\//,"")
如果需要,我可以解释正则表达式。
答案 2 :(得分:0)
便宜的答案是在第一张单/
之前删除所有内容。
更好的答案是“How do I process a URL in ruby to extract the component parts (scheme, username, password, host, etc)?”和“Remove subdomain from string in ruby”。
答案 3 :(得分:0)
link = "http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg"
path = link.match /\/\/[^\/]*\/(.*)/
path[1]
#=> "uploads/users/15/photos/12/foo.jpg"
答案 4 :(得分:0)
有人也推荐这种方法:
URI.parse(URI.escape('http://foobar.s3.amazonaws.com/uploads/users/15/photos/12/foo.jpg')).path[1..-1]
使用类似这样的东西和正则表达式方法有什么缺点吗?