[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Problem with String.gsub and \' as a replacement string

ridcully

11/17/2007 11:19:00 AM

Hi,

I want to replace all occurences of a certain character in a string
with a backslash followed by a single quote. Sounds like a trivial
task, but this is what I get:

"this is a test".gsub( "a", "\\'" ) -> "this is test test"

What I want is "this is \' test".

Neither does this work:
"this is a test".gsub( "a", '\' + "'" )

No matter what I am doing, as soon as a backslash is followed by a
single quote in the replacement string, I am getting weird results.

Thanks for your help!

Andreas
4 Answers

Alex Young

11/17/2007 11:23:00 AM

0

ridcully wrote:
> Hi,
>
> I want to replace all occurences of a certain character in a string
> with a backslash followed by a single quote. Sounds like a trivial
> task, but this is what I get:
>
> "this is a test".gsub( "a", "\\'" ) -> "this is test test"
>
> What I want is "this is \' test".
>
> Neither does this work:
> "this is a test".gsub( "a", '\' + "'" )
>
> No matter what I am doing, as soon as a backslash is followed by a
> single quote in the replacement string, I am getting weird results.
Backslashes are confusing. Try this:

puts "this is a test".gsub( "a", "\\\\'" )

--
Alex

ridcully

11/17/2007 11:30:00 AM

0

On 17 Nov., 12:22, Alex Young <a...@blackkettle.org> wrote:
> Backslashes are confusing. Try this:
>
> puts "this is a test".gsub( "a", "\\\\'" )
>
> --
> Alex

Thank you, you saved my day!

This really is confusing, because "\\'" gives me the correct result if
I don't use it with gsub:

puts "\\'" -> \'

Am I missing something here?

Andreas

Sebastian Hungerecker

11/17/2007 11:48:00 AM

0

ridcully wrote:
> On 17 Nov., 12:22, Alex Young <a...@blackkettle.org> wrote:
> > puts "this is a test".gsub( "a", "\\\\'" )
>
> Thank you, you saved my day!
>
> This really is confusing, because "\\'" gives me the correct result if
> I don't use it with gsub:
>
> puts "\\'" -> \'
>
> Am I missing something here?

"\\'" translates to a literal backslash followed by '. This is what gsub gets.
gsub then sees \' and replaces it with $' the same way it would replace \1
with $1. To tell it not to do that it has to get \\', so it knows it's not
supposed to treat \' as special. In order to archieve that you have to
write "\\\\'". Hope that cleared things up for you.


--
NP: Falkenbach - Vanadis
Jabber: sepp2k@jabber.org
ICQ: 205544826

botp

11/17/2007 1:05:00 PM

0

On Nov 17, 2007 7:20 PM, ridcully <google@ridcully.net> wrote:
> "this is a test".gsub( "a", "\\'" ) -> "this is test test"

many ways, eg

~> "this is a test".gsub("i",Regexp.escape("\\'"))
=> "th\\'s \\'s a test"

~> "this is a test".gsub("i"){"\\'"}
=> "th\\'s \\'s a test"

the block form seems clean though.

kind regards -botp