删除 Ruby 中 URI 的最后一段
Remove last segment of an URI in Ruby
我正在尝试使用 Ruby、
删除给定 URI 的最后一段
像这样:
http://example.com/foo/bar/baz/?lala=foo
我怎样才能得到这个:
"http://example.com/foo/bar/baz/"
我已经搜索过,但我得到的只是获取 URI 的最后一段或主机部分。
s = "http://example.com/foo/bar/baz/?lala=foo"
"http://example.com/foo/bar/baz/?lala=foo"
["http://example.com/foo/bar/baz/", "lala=foo"]
>> s.split("?").first
"http://example.com/foo/bar/baz/"
你有没有尝试过这样的事情,可能是你想要拆分字符串时的第一件事
最重要的是要记住:Ruby是一种面向对象的语言。它不是面向数组的语言,不是面向散列的语言,也不是面向字符串的语言。
当你想做某事时,你会构造一个代表你的概念的对象并操纵该对象。在这种情况下,您想要操作一个 URI,因此您需要构造一个表示 URI 的对象。
值得庆幸的是,Ruby 标准库已经包含了针对此类对象的现成 class:
require 'uri'
uri = URI.parse('http://example.com/foo/bar/baz/?lala=foo#quux')
uri.query = nil
uri
# => #<URI::HTTP http://example.com/foo/bar/baz/#quux>
uri.to_s
# => 'http://example.com/foo/bar/baz/#quux'
uri.fragment = nil
uri
# => #<URI::HTTP http://example.com/foo/bar/baz/>
uri.to_s
# => 'http://example.com/foo/bar/baz/'
如您所见,一旦您创建了一个代表您的 URI 的适当对象,对其进行操作就变得微不足道了。
根据你对@JorgWMittag 的评论,你真正需要的是这个
s = 'http://example.com/foo/bar/baz/?lala=foo#quux'
s[/.*\//]
#=> "http://example.com/foo/bar/baz/"
s = 'http://example.com/foo/bar.html'
s[/.*\//]
#=> "http://example.com/foo/"
基本上它只是说如果你有像
s = "http://example.com/foo/bar/?baz=/blah/blah"
那么这将行不通,但您的问题和规格目前似乎很松散。
我正在尝试使用 Ruby、
删除给定 URI 的最后一段像这样:
http://example.com/foo/bar/baz/?lala=foo
我怎样才能得到这个:
"http://example.com/foo/bar/baz/"
我已经搜索过,但我得到的只是获取 URI 的最后一段或主机部分。
s = "http://example.com/foo/bar/baz/?lala=foo"
"http://example.com/foo/bar/baz/?lala=foo"
["http://example.com/foo/bar/baz/", "lala=foo"]
>> s.split("?").first
"http://example.com/foo/bar/baz/"
你有没有尝试过这样的事情,可能是你想要拆分字符串时的第一件事
最重要的是要记住:Ruby是一种面向对象的语言。它不是面向数组的语言,不是面向散列的语言,也不是面向字符串的语言。
当你想做某事时,你会构造一个代表你的概念的对象并操纵该对象。在这种情况下,您想要操作一个 URI,因此您需要构造一个表示 URI 的对象。
值得庆幸的是,Ruby 标准库已经包含了针对此类对象的现成 class:
require 'uri'
uri = URI.parse('http://example.com/foo/bar/baz/?lala=foo#quux')
uri.query = nil
uri
# => #<URI::HTTP http://example.com/foo/bar/baz/#quux>
uri.to_s
# => 'http://example.com/foo/bar/baz/#quux'
uri.fragment = nil
uri
# => #<URI::HTTP http://example.com/foo/bar/baz/>
uri.to_s
# => 'http://example.com/foo/bar/baz/'
如您所见,一旦您创建了一个代表您的 URI 的适当对象,对其进行操作就变得微不足道了。
根据你对@JorgWMittag 的评论,你真正需要的是这个
s = 'http://example.com/foo/bar/baz/?lala=foo#quux'
s[/.*\//]
#=> "http://example.com/foo/bar/baz/"
s = 'http://example.com/foo/bar.html'
s[/.*\//]
#=> "http://example.com/foo/"
基本上它只是说如果你有像
s = "http://example.com/foo/bar/?baz=/blah/blah"
那么这将行不通,但您的问题和规格目前似乎很松散。