shicholas
shicholas

Reputation: 6153

Match regex works for one search, but scan does not

The following gets me one match:

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

When I examine 'find' I get:

first_name=aoeu

I want to match everything between a '?' and a '&', so I tried

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

But yet when I examine 'find' I now get:

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

What do I need to do to get:

[first_name=aoeu][last_name=rar]

or

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

?

Upvotes: 0

Views: 90

Answers (3)

halfelf
halfelf

Reputation: 10107

Use other module provided by ruby or rails will make your code more maintainable and readable.

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

Upvotes: 3

Andrei Subbota
Andrei Subbota

Reputation: 116

If you need extract query params from URI, please, check thread "How to extract URL parameters from a URL with Ruby or Rails?". It contains a lot of solutions without using regexps.

Upvotes: 0

sawa
sawa

Reputation: 168189

Use String#split.

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

or

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

But if your real purpose is to extract the parameters from url, then question and its answer.

Upvotes: 3

Related Questions