Bug #8136

gsub strange behavior when substituting "\\'"

Added by Alexey Muranov about 1 year ago. Updated about 1 year ago.

[ruby-core:53602]
Status:Closed
Priority:Normal
Assignee:-
Category:doc
Target version:-
ruby -v:2.0.0 Backport:

Description

=begin
s = "\'" # => "\'"
print s # \'
"foo".gsub("f", s) # => "oooo"

Can anybody please explain to me why it works like this? Is this a bug?
=end

History

#1 Updated by Benoit Daloze about 1 year ago

Seems like \' is interpreted as $' ($POSTMATCH) which is in this case 'oo'.

#2 Updated by Nobuyoshi Nakada about 1 year ago

  • Category set to doc
  • Status changed from Open to Closed

This is one of most frequently asked questions.
Though I can't remember a pointer to good explanation, someone would know it.

#3 Updated by Alexey Muranov about 1 year ago

Excuse me, nobu, i have not understood, how can i replace something with a backslash followed by a single quote?

#4 Updated by Nobuyoshi Nakada about 1 year ago

=begin
You need more escapes.

"foo".gsub("f", "\\'")
=end

#5 Updated by Alexey Muranov about 1 year ago

nobu (Nobuyoshi Nakada) wrote:

=begin
You need more escapes.

"foo".gsub("f", "\\'")
=end

Thank you, i have not read the documentation carefully. It is still a bit strange to me that a replacement string is not taken literally by default.

Also available in: Atom PDF