Gsub and single quote issue


#1

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.


#2

On 24.03.2009 21:32, Raj S. wrote:

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 /’/, “<\’>”
=> " Rubys gem "

There is also pre match:

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

Kind regards

robert


#3

Robert K. wrote:

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.


#4

On 25.03.2009 06:18, 7stud – wrote:

Robert K. wrote:

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.

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