匹配正则表达式适用于一次搜索,但扫描不适用

时间:2012-09-26 06:51:31

标签: ruby regex

以下是一场比赛:

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

当我检查'发现'时,我得到了:

first_name=aoeu

我希望匹配'?'之间的所有内容和'&amp;',所以我试过

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

但是当我检查'发现'时,我现在得到了:

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

我需要做什么才能获得:

[first_name=aoeu][last_name=rar]

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

3 个答案:

答案 0 :(得分:3)

使用String#split

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

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

但如果您的真正目的是从网址中提取参数,那么question and its answer

答案 1 :(得分: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"]}

答案 2 :(得分:0)

如果您需要从URI中提取查询参数,请检查线程"How to extract URL parameters from a URL with Ruby or Rails?"。它包含许多不使用正则表达式的解决方案。