From: Robert Klemme Date: 2011-08-25T17:32:47+09:00 Subject: Re: how to find all matches using ruby regex? On Thu, Aug 25, 2011 at 12:14 AM, michael xu wrote: > I have the following ruby code and I want to find all matched > "data-1.2.5.tar.gz" and "data-1.2.7.tar.gz", then stored in $1 and $2. > When I executed it and I found $1 is "data-1.2.5.tar.gz", but $2 is nil. > How can I get $2 is "data-1.2.7.tar.gz"? > > ============================================================= > string1 = "data-1.2.5.tar.gz and data-1.2.7.tar.gz and readme." > > if string1 =~ /(data-\d+\.\d+\.\d+\.tar\.gz)/ >  print "Matched on ", $1, "\n" >  print "Matched on ", $2, "\n" > > else >  puts "NO MATCH" > end Are you sure there are always exactly two of them? If not, #scan is better: irb(main):001:0> string1 = "data-1.2.5.tar.gz and data-1.2.7.tar.gz and readme." => "data-1.2.5.tar.gz and data-1.2.7.tar.gz and readme." irb(main):002:0> string1.scan /data-\d+(?:\.\d+)*\.tar\.gz/ => ["data-1.2.5.tar.gz", "data-1.2.7.tar.gz"] Kind regards robert -- remember.guy do |as, often| as.you_can - without end http://blog.rubybestpractices.com/