[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

$-variables and regexp

konsu

12/16/2005 1:06:00 AM

hello,

if i indeed want to start using MatchData instead of the "warts" such
as $-variables in regular expressions, how do i go about writing code
blocks for String#sub et al if i want to get a match for a particular
group?

example:

puts 'a-b-c-'.gsub(/(.)-/) { $1 + '_' }

thanks
konstantin

4 Answers

Neil Stevens

12/16/2005 1:30:00 AM

0

ako... wrote:
> hello,
>
> if i indeed want to start using MatchData instead of the "warts" such
> as $-variables in regular expressions, how do i go about writing code
> blocks for String#sub et al if i want to get a match for a particular
> group?
>
> example:
>
> puts 'a-b-c-'.gsub(/(.)-/) { $1 + '_' }

puts 'a-b-c-'.gsub(/(.)-/) { |str| str + '_' }

Though gsub never does give you access to MatchData. MatchData is used
when you do something like this:

matchData = /([[:alpha:]]+):([[:alpha:]]+)/.match('abc:xyz')
=> MatchData
matchData[1]
=> 'abc'
matchData[2]
=> 'xyz'

--
Neil Stevens - neil@hakubi.us

'A republic, if you can keep it.' -- Benjamin Franklin

konsu

12/16/2005 1:33:00 AM

0

> puts 'a-b-c-'.gsub(/(.)-/) { |str| str + '_' }

i think this is incorrect. id appends an underscore. i need to replace
it.

Neil Stevens

12/16/2005 1:42:00 AM

0

ako... wrote:
>>puts 'a-b-c-'.gsub(/(.)-/) { |str| str + '_' }
>
>
> i think this is incorrect. id appends an underscore. i need to replace
> it.

Ah, sorry, mis-read what yours did.

It appears that gsub has been written to depend on the magic variables,
because it gives you no other means of accessing the MatchData.

So, to use gsub like this and get the MatchData, your guess is as good
as mine as to how to get to it. Just hold down shift and pound on the
keyboard until you guess the right bit of magic punctuation.

Sorry I couldn't help more,

--
Neil Stevens - neil@hakubi.us

'A republic, if you can keep it.' -- Benjamin Franklin

James Gray

12/16/2005 2:09:00 AM

0

On Dec 15, 2005, at 7:46 PM, ako... wrote:

> hello,
>
> if i indeed want to start using MatchData instead of the "warts" such
> as $-variables in regular expressions, how do i go about writing code
> blocks for String#sub et al if i want to get a match for a particular
> group?
>
> example:
>
> puts 'a-b-c-'.gsub(/(.)-/) { $1 + '_' }

The MatchData object is also placed in a global variable, but I won't
show it here since it is a punctuation variable and you requested
something different.

Not a direct answer, but you can just use a replacement string in
this case:

'a-b-c-'.gsub(/(.)-/, '\1_')

Or even no regular expression at all:

'a-b-c-'.tr('-', '_')

Hope that helps.

James Edward Gray II