gsub and single quote issue

R

Raj Singh

a = " Ruby's gem "

puts a.gsub(/[']/, "") #=> 1. Rubys gem

puts a.gsub(/[']/, "'") #=> 2. Ruby's gem

puts a.gsub(/[']/, "\'") #=> 3. Ruby's gem

puts a.gsub(/[']/, "\\'") #=> 4. Rubys gem s gem

puts a.gsub(/[']/, "\\\'") #=> 5. Rubys gem s gem

puts a.gsub(/[']/, "\\\\'") #=> 6. Ruby\'s gem

puts " "


I couldn't understand the result for #4 and #5. Any explanation is
appreciated.
 
R

Robert Klemme

a = " Ruby's gem "

puts a.gsub(/[']/, "") #=> 1. Rubys gem

puts a.gsub(/[']/, "'") #=> 2. Ruby's gem

puts a.gsub(/[']/, "\'") #=> 3. Ruby's gem

puts a.gsub(/[']/, "\\'") #=> 4. Rubys gem s gem

puts a.gsub(/[']/, "\\\'") #=> 5. Rubys gem s gem

puts a.gsub(/[']/, "\\\\'") #=> 6. Ruby\'s gem

puts " "


I couldn't understand the result for #4 and #5. Any explanation is
appreciated.

The sequence \' in a replacement string is interpreted as the post
match. That's why you see the duplication. You'll see this nicely by
bracketing the replacement:

irb(main):012:0> a = " Ruby's gem "
=> " Ruby's gem "
irb(main):013:0> a.gsub /'/, "<\\'>"
=> " Ruby<s gem >s gem "

There is also pre match:

irb(main):014:0> a.gsub /'/, "<\\`>"
=> " Ruby< Ruby>s gem "

Kind regards

robert
 
7

7stud --

Robert said:
The sequence \' in a replacement string is interpreted as the post
match.

I assume that has something to do with ruby's crazy global variables,
e.g $'. In that case, why isn't the '$' required.
 
R

Robert Klemme

I assume that has something to do with ruby's crazy global variables,
e.g $'. In that case, why isn't the '$' required.

The replacement string is interpreted by sub and gsub and this is just
the convention that was chosen. Btw, it's the same convention as in sed
and a number of other regular expression based replacement tools as well.

Kind regards

robert
 

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,774
Messages
2,569,596
Members
45,143
Latest member
DewittMill
Top