I've got the following string...
"This is ( a test"
And I want to do a regex gsub on it to turn it into...
"This is \( a test"
In irb, If I start with...
"This is ( a test".gsub(/[\(]/,'\&') => "This is ( a test"
And then progressively added more backslashes, I get the following
results, none of which are what I'm looking for. The second one is,
IMO, the one that should work.
"This is ( a test".gsub(/[\(]/,'\\&') => "This is ( a test"
"This is ( a test".gsub(/[\(]/,'\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\\&')=> "This is \\( a test"
Am I just having a serious case of the mondays, or is there a bug in how
Ruby deals with \ characters when trying to represent an actual single \
character?
I'm using ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
···
--
http://www.5valleys.com/
http://www.workingwithrails.com/person/8078
Jon Garvin wrote:
I've got the following string...
"This is ( a test"
And I want to do a regex gsub on it to turn it into...
"This is \( a test"
In irb, If I start with...
"This is ( a test".gsub(/[\(]/,'\&') => "This is ( a test"
And then progressively added more backslashes, I get the following
results, none of which are what I'm looking for. The second one is,
IMO, the one that should work.
"This is ( a test".gsub(/[\(]/,'\\&') => "This is ( a test"
"This is ( a test".gsub(/[\(]/,'\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\\&')=> "This is \\( a test"
Am I just having a serious case of the mondays, or is there a bug in how
Ruby deals with \ characters when trying to represent an actual single \
character?
I'm using ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
irb shows you the result using p, which escapes special characters in
the string it displays. Use puts to see the actual string.
C:\>irb
irb(main):001:0> x = "This is ( a test"
=> "This is ( a test"
irb(main):002:0> x.gsub(/\(/, '\\\(')
=> "This is \\( a test"
irb(main):003:0> y = x.gsub(/\(/, '\\\(')
=> "This is \\( a test"
irb(main):004:0> puts y
This is \( a test
=> nil
irb(main):005:0>
···
--
Posted via http://www.ruby-forum.com/\.
Tim Hunter wrote:
Jon Garvin wrote:
I've got the following string...
"This is ( a test"
And I want to do a regex gsub on it to turn it into...
"This is \( a test"
In irb, If I start with...
"This is ( a test".gsub(/[\(]/,'\&') => "This is ( a test"
And then progressively added more backslashes, I get the following
results, none of which are what I'm looking for. The second one is,
IMO, the one that should work.
"This is ( a test".gsub(/[\(]/,'\\&') => "This is ( a test"
"This is ( a test".gsub(/[\(]/,'\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\\&')=> "This is \\( a test"
Am I just having a serious case of the mondays, or is there a bug in how
Ruby deals with \ characters when trying to represent an actual single \
character?
I'm using ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
irb shows you the result using p, which escapes special characters in
the string it displays. Use puts to see the actual string.
C:\>irb
irb(main):001:0> x = "This is ( a test"
=> "This is ( a test"
irb(main):002:0> x.gsub(/\(/, '\\\(')
=> "This is \\( a test"
irb(main):003:0> y = x.gsub(/\(/, '\\\(')
=> "This is \\( a test"
irb(main):004:0> puts y
This is \( a test
=> nil
irb(main):005:0>
Oh, fer cryin' out loud. Case of the mondays it is. Thanks.
···
--
http://www.5valleys.com/
http://www.workingwithrails.com/person/8078
badboy wrote:
Jon Garvin schrieb:
I've got the following string...
"This is ( a test"
And I want to do a regex gsub on it to turn it into...
"This is \( a test"
In irb, If I start with...
"This is ( a test".gsub(/[\(]/,'\&') => "This is ( a test"
And then progressively added more backslashes, I get the following
results, none of which are what I'm looking for. The second one is,
IMO, the one that should work.
"This is ( a test".gsub(/[\(]/,'\\&') => "This is ( a test"
"This is ( a test".gsub(/[\(]/,'\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\&') => "This is \\& a test"
"This is ( a test".gsub(/[\(]/,'\\\\\&')=> "This is \\( a test"
Am I just having a serious case of the mondays, or is there a bug in how
Ruby deals with \ characters when trying to represent an actual single \
character?
I'm using ruby 1.8.6 (2007-09-24 patchlevel 111) [i486-linux]
you know Regexp.escape ?
Yikes...thanks for the reminder. I always seem to find 6 hard ways to do something before learning (and occasionally discovering) an easy way. Regexp.escape solve LOTS of problems quickly. ~t.
···
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Tom Cloyd, MS MA, LMHC - Private practice Psychotherapist
Bellingham, Washington, U.S.A: (360) 920-1226
<< tc@tomcloyd.com >> (email)
<< TomCloyd.com >> (website) << sleightmind.wordpress.com >> (mental health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~