How to find all matches using ruby regex?

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

--
Posted via http://www.ruby-forum.com/.

"data-1.2.5.tar.gz and data-1.2.7.tar.gz and readme.".scan
/data-\d+\.\d+\.\d+\.tar\.gz/
# => ["data-1.2.5.tar.gz", "data-1.2.7.tar.gz"]

Hope this helps

···

2011/8/24 michael xu <guorong.xu@gmail.com>

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

--
Posted via http://www.ruby-forum.com/\.

You never set the 2nd set of parens (...) in the original regex:
(data-\d+\.\d+\.\d+\.tar\.gz)/

therefore, no $2 for you...

change to regex to /(data\S+) and (data\S+)/, and you get $1 and $2...

michael xu wrote in post #1018329:

···

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

--
Posted via http://www.ruby-forum.com/\.

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

···

On Thu, Aug 25, 2011 at 12:14 AM, michael xu <guorong.xu@gmail.com> 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

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

Yes, it works fine.
Thank you Nik!

Nik Z. wrote in post #1018346:

···

You never set the 2nd set of parens (...) in the original regex:
(data-\d+\.\d+\.\d+\.tar\.gz)/

therefore, no $2 for you...

change to regex to /(data\S+) and (data\S+)/, and you get $1 and $2...

--
Posted via http://www.ruby-forum.com/\.