[newbie] How do I match a regex multiple times?

R

Robo

When I use String#match, it only seems to match the regex pattern once. How
do I tell it to match the pattern as many times as possible?

e.g. puts 'robo ruler ruby'.match(/r\w+/)

That only return 'robo', but I would like it to return [robo, ruler, ruby]

I tried using the /g modifier, but Ruby doesn't seem to know about that.

I'm doing this 'cos I'm trying to extract all the function names from a PHP
file, but I shouldn't have to tell it to search it line by line do I?

Robo
 
T

ts

R> e.g. puts 'robo ruler ruby'.match(/r\w+/)

String#scan

svg% ri String#scan
------------------------------------------------------------ String#scan
str.scan(pattern) => array
str.scan(pattern) {|match, ...| block } => str
------------------------------------------------------------------------
Both forms iterate through _str_, matching the pattern (which may
be a +Regexp+ or a +String+). For each match, a result is generated
and either added to the result array or passed to the block. If the
pattern contains no groups, each individual result consists of the
matched string, +$&+. If the pattern contains groups, each
individual result is itself an array containing one entry per
group.

a = "cruel world"
a.scan(/\w+/) #=> ["cruel", "world"]
a.scan(/.../) #=> ["cru", "el ", "wor"]
a.scan(/(...)/) #=> [["cru"], ["el "], ["wor"]]
a.scan(/(..)(..)/) #=> [["cr", "ue"], ["l ", "wo"]]

And the block form:

a.scan(/\w+/) {|w| print "<<#{w}>> " }
print "\n"
a.scan(/(.)(.)/) {|a,b| print b, a }
print "\n"

_produces:_

<<cruel>> <<world>>
rceu lowlr

svg%


Guy Decoux
 
B

Bil Kleb

Robo said:
When I use String#match, it only seems to match the regex pattern once. How
do I tell it to match the pattern as many times as possible?

puts 'robo ruler ruby'.scan(/r\w+/)
robo
ruler
ruby

Regards,
 

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

No members online now.

Forum statistics

Threads
473,763
Messages
2,569,563
Members
45,039
Latest member
CasimiraVa

Latest Threads

Top