0

以下为我提供了一场比赛:

query = http://0.0.0.0:9393/review?first_name=aoeu&last_name=rar
find = /(?<=(\?|\&)).*?(?=(\&|\z))/.match(query)

当我检查“发现”时,我得到:

first_name=aoeu

我想匹配“?”之间的所有内容 和一个'&',所以我尝试了

find = query.scan(/(?<=(\?|\&)).*?(?=(\&|\z))/)

但是,当我检查“发现”时,我现在得到:

[["?", "&"], ["&", ""]]

我需要做什么才能获得:

[first_name=aoeu][last_name=rar]

或者

["first_name=aoeu","last_name=rar"]

?

4

3 回答 3

3

使用String#split.

query.split(/[&?]/).drop(1)

或者

query[/(?<=\?).*/].split("&")

但是,如果您的真正目的是从 url 中提取参数,那么question 和它的 answer

于 2012-09-26T07:00:35.773 回答
3

使用 ruby​​ 或 rails 提供的其他模块将使您的代码更具可维护性和可读性。

require 'uri'
uri = 'http://0.0.0.0:9393/review?first_name=aoeu&last_name=rar'

require 'rack'
require 'rack/utils'
Rack::Utils.parse_query(URI.parse(uri).query)
# => {"first_name"=>"aoeu", "last_name"=>"rar"}

# or CGI
require 'cgi'
CGI::parse(URI.parse(uri).query)
# => {"first_name"=>["aoeu"], "last_name"=>["rar"]}
于 2012-09-26T07:14:17.613 回答
0

如果您需要从 URI 中提取查询参数,请查看线程“如何使用 Ruby 或 Rails 从 URL 中提取 URL 参数?” . 它包含很多不使用正则表达式的解决方案。

于 2012-09-26T07:12:22.077 回答