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



以下让我得到一个匹配:

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"]

使用 String#split

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

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

但是,如果您的真正目的是从url中提取参数,那么问题及其答案。

使用 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"]}
如果您需要

从URI中提取查询参数,请检查线程"如何使用Ruby或Rails从URL中提取URL参数?它包含许多不使用正则表达式的解决方案。

最新更新