regex to escape special characters

J

Jon Garvin

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]
 
T

Tim Hunter

Jon said:
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>
 
J

Jon Garvin

[Note: parts of this message were removed to make it a legal post.]

Tim said:
Jon said:
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.
 
B

badboy

Jon said:
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 ?
 
T

Tom Cloyd

badboy said:
Jon said:
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
<< (e-mail address removed) >> (email)
<< TomCloyd.com >> (website)
<< sleightmind.wordpress.com >> (mental health weblog)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

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

No members online now.

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,812
Latest member
GracielaWa

Latest Threads

Top