Regex question

I have a lot of code that looks like this:

line = "some line of stuff"
line =~ /regex stuff here/
if $1; result = $1; end

Generally, I'm checking to see if a given regex exists in a string and
I usually want to save some stuff from it.

But my way seems kinda clunky...

match_data = line.match(/regular expression/)
unless match_data[1].nil?
           result = match_data[1]
end

match_data[0] is $&
match_data[1] is $1
etc.
The other advantage being is that you can keep the MatchData object
around after you perform another match, since $1, $2, etc.. will get
over-written

ยทยทยท

On Thu, 17 Mar 2005 13:46:24 +0900, Joe Van Dyk <joevandyk@gmail.com> wrote:

I have a lot of code that looks like this:

line = "some line of stuff"
line =~ /regex stuff here/
if $1; result = $1; end

Generally, I'm checking to see if a given regex exists in a string and
I usually want to save some stuff from it.

But my way seems kinda clunky...

Joe Van Dyk wrote:

I have a lot of code that looks like this:

line = "some line of stuff"
line =~ /regex stuff here/
if $1; result = $1; end

Generally, I'm checking to see if a given regex exists in a string and
I usually want to save some stuff from it.

"foo bar"[/foo/]
=> "foo"

works nice for this.

Also:

"foo bar"[/\w+ (\w+)/, 1]
=> "bar"

Also, String#scan, if you don't know how many matches to look for.

Joe Van Dyk wrote:

I have a lot of code that looks like this:

line = "some line of stuff"
line =~ /regex stuff here/
if $1; result = $1; end

Generally, I'm checking to see if a given regex exists in a string and
I usually want to save some stuff from it.

But my way seems kinda clunky...

You could use String#scan.

E

line = "some line of stuff"
line =~ /regex stuff here/
if $1; result = $1; end

Generally, I'm checking to see if a given regex exists in a string

and

I usually want to save some stuff from it.

But my way seems kinda clunky...

I like this way:

.. if md = line.match(regex) # assign expr result in if
.. puts md.captures
.. end

HTH,
Assaph

match_data = line.match(/regular expression/)
unless match_data[1].nil?

careful, match_data can be nil itself if there was no match.