find next occurence, regular expressions

J

John Griffiths

Hi, ok I'm none to good at regular expressions but i've got to do
something and need a little help.

Basically i'm trying to hunt down a particular word within a url string,

so to test, i define a local variable, var_string,

var_string="user=22&val=999"

then run a regular expression match on the variable,

user = var_string.match(/=(\w+)&/)

which returns => '22' as it's looking for the first word occurence which
has = and a & at the start & finish.

so the question is how could i return the second occurence (999) ?
 
S

Stefano Crocco

Alle domenica 30 dicembre 2007, John Griffiths ha scritto:
Hi, ok I'm none to good at regular expressions but i've got to do
something and need a little help.

Basically i'm trying to hunt down a particular word within a url string,

so to test, i define a local variable, var_string,

var_string="user=22&val=999"

then run a regular expression match on the variable,

user = var_string.match(/=(\w+)&/)

which returns => '22' as it's looking for the first word occurence which
has = and a & at the start & finish.

so the question is how could i return the second occurence (999) ?

In ruby 1.8, String#match always returns the first match. If you need to find
other matches, you can look at StringScanner or String#scan (of course,
you'll need to remove the & from the regexp, or make it optional, if you want
to match the string '999'. To make the '&' optional, put a ? after
it: /=(\w+)&?).

In ruby 1.9, instead String#match should accept an offset (as far as I know,
the documentation doesn't mention this, but it seems to work). You should
still modify the regexp to make it work.

I hope this helps

Stefano
 
W

Wolfgang Nádasi-Donner

John said:
Hi, ok I'm none to good at regular expressions but i've got to do
something and need a little help.

Basically i'm trying to hunt down a particular word within a url string,

so to test, i define a local variable, var_string,

var_string="user=22&val=999"

then run a regular expression match on the variable,

user = var_string.match(/=(\w+)&/)

which returns => '22' as it's looking for the first word occurence which
has = and a & at the start & finish.

so the question is how could i return the second occurence (999) ?

I think this will be an easy solution...

var_string="user=22&val=999"
vars = {}
var_string.scan(/(\w+)=(\w+)(?:&|$)/) do |name, val|
vars[name] = val
end
p vars # => {"user"=>"22", "val"=>"999"}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,774
Messages
2,569,596
Members
45,141
Latest member
BlissKeto
Top