我有一系列丑陋,复杂的网址字符串,我想从http://google.com/search/things/q="example"
中分离出人们输入的特定搜索字词,例如“示例”。
偶尔会有一个搜索区分+
个字词,并且在用户指定的查询结尾处是&
。
即使经过大量谷歌搜索,我也不知道从哪里开始。任何帮助我开始的帮助都将不胜感激!
答案 0 :(得分:5)
CGI.parse(URI.parse(url).query)
示例:
>> CGI.parse(URI.parse("http://google.com/?foo=bar&baz=hello").query)
=> {"foo"=>["bar"], "baz"=>["hello"]}
当然,请务必首先要求cgi
和uri
。
答案 1 :(得分:0)
你可能想要这样的东西:http://codefol.io/posts/9-How-Does-Rack-Parse-Query-Params-With-parse-nested-query
如果您使用的是基于Rack的框架(如Sinatra或Rails),那么您已经免费使用它了。
答案 2 :(得分:0)
Addressable::URI gem和Ruby自己的URI模块,既可以做你想要的,也可以很容易地自己动手。
Addressable :: URI功能非常强大,符合URI规范。以下是PRY内部使用的示例:
[9] (pry) main: 0> uri = Addressable::URI.parse('http://google.com/search/things?q="example"')
=> #<Addressable::URI:0x80ec33a0 URI:http://google.com/search/things?q="example">
[10] (pry) main: 0> uri.query
=> "q=\"example\""
[11] (pry) main: 0> uri.query_values
=> {"q"=>"\"example\""}
特别有用的是返回哈希的query_values
方法。
你可以轻松地写出一些相同的东西:
Hash['http://google.com/search/things?q="example"'.split('?').last.split('&').map{ |q| q.split('=') }]
=> {"q"=>"\"example\""}
Addressable :: URI和URI的优点是它们提供了很多其他功能来操作URL,而不必这样做。