Ruby regexp Match

J

John Sheahan

I am trying to convert some old Perl scripts to Ruby and am stuck at a
spot where my Perl script is doing a regular expression match on some
text pulled from a webpage.

In Perl, I was able to grab the text I wanted by putting () around the
regular expression which represented the data I wanted, then access it
with the x[0] method.

Is there something like this in Ruby? I was looking through the String
class and don't really see a method listed to do this.

I want to be able to do a kind of match like:

m/^Title([a-zA-Z0-9])//g

and access what's inside the () with x[0].

Thanks

jackster
 
B

botp

I want to be able to do a kind of match like:
m/^Title([a-zA-Z0-9])//g
and access what's inside the () with x[0].

ruby gives more (objects), see http://ruby-doc.org/core/classes/MatchData.html

some simple examples

t="Title123asdf"
#=> "Title123asdf"
/^Title([a-zA-Z0-9])/.match(t)
#=> #<MatchData:0x28b7b60>
/^Title([a-zA-Z0-9])/.match(t)[0]
#=> "Title1"
/^Title([a-zA-Z0-9])/.match(t)[1]
#=> "1"
$~
#=> #<MatchData:0x28afc94>
$~[0]
#=> "Title1"
$~[1]
#=> "1"
x=/^Title([a-zA-Z0-9])/.match(t)
#=> #<MatchData:0x28a8598>
x[0]
#=> "Title1"
x[1]

kind regards -botp
 
J

Justin Collins

John said:
I am trying to convert some old Perl scripts to Ruby and am stuck at a
spot where my Perl script is doing a regular expression match on some
text pulled from a webpage.

In Perl, I was able to grab the text I wanted by putting () around the
regular expression which represented the data I wanted, then access it
with the x[0] method.

Is there something like this in Ruby? I was looking through the String
class and don't really see a method listed to do this.

I want to be able to do a kind of match like:

m/^Title([a-zA-Z0-9])//g

and access what's inside the () with x[0].

Thanks

jackster

Yes.

irb(main):001:0> result = "Title1".match(/^Title([a-zA-Z0-9])/)
=> #<MatchData:0xb7d90654>
irb(main):002:0> result[1]
=> "1"
irb(main):003:0> $1
=> "1"
irb(main):004:0> Regexp.last_match[1]
=> "1"
irb(main):005:0> $~[1]
=> "1"


http://ruby-doc.org/core/classes/MatchData.html

-Justin
 
J

John Sheahan

I got it!

thanks to everyone that posted a reply....you all were very helpful!
jackster
John said:
I want to be able to do a kind of match like:

m/^Title([a-zA-Z0-9])//g

and access what's inside the () with x[0].

Thanks

jackster

Yes.

irb(main):001:0> result = "Title1".match(/^Title([a-zA-Z0-9])/)
=> #<MatchData:0xb7d90654>
irb(main):002:0> result[1]
=> "1"
irb(main):003:0> $1
=> "1"
irb(main):004:0> Regexp.last_match[1]
=> "1"
irb(main):005:0> $~[1]
=> "1"


http://ruby-doc.org/core/classes/MatchData.html

-Justin
 
M

MonkeeSage

I got it!

thanks to everyone that posted a reply....you all were very helpful!
jackster


John Sheahan wrote:
I want to be able to do a kind of match like:
m/^Title([a-zA-Z0-9])//g
and access what's inside the () with x[0].
Thanks
jackster

irb(main):001:0> result = "Title1".match(/^Title([a-zA-Z0-9])/)
=> #<MatchData:0xb7d90654>
irb(main):002:0> result[1]
=> "1"
irb(main):003:0> $1
=> "1"
irb(main):004:0> Regexp.last_match[1]
=> "1"
irb(main):005:0> $~[1]
=> "1"

-Justin

You can also do like you would in perl...

"TitleA" =~ /^Title([a-zA-Z0-9])/
puts $1
# => A

Regards,
Jordan
 

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,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top