N00b string replace

Hi I’m triying to substitute any ocurrences of ’ in a string by ’

Here’s a bit of testing I made in irb which wtf’s me:

irb(main):002:0> st = “un ’ monton ’ de ’ apostrofes '”
=> “un ’ monton ’ de ’ apostrofes '”
irb(main):003:0> sst = st.gsub(/’/,"’")
=> “un ’ monton ’ de ’ apostrofes '”

ok substitute ’ by ’ :stuck_out_tongue: I don’t know why interpeter interpret ’ as
’ when in a double-quoted string contex but I’m a newbie so sure I’m
wrong

irb(main):004:0> sst = st.gsub(/’/,"\’")
=> “un monton ’ de ’ apostrofes ’ monton de ’ apostrofes ’ de
apostrofes ’ apostrofes "
irb(main):005:0> sst = st.gsub(/’/,”\’")
=> "un monton ’ de ’ apostrofes ’ monton de ’ apostrofes ’ de
apostrofes ’ apostrofes "

This seems to be substitute ’ by “rest of string from ocurrence”
regardless of scape chars

Totally dazzed and desperate I tried with another backslash… who
cares … and get this

irb(main):006:0> sst = st.gsub(/’/,"\\’")
=> “un \’ monton \’ de \’ apostrofes \’”

How do I get “un ’ monton ’ de ’ apostrofes '” from “un ’ monton ’
de ’ apostrofes '”? using regex?

Thanks

Hi,

On Apr 30, 12:22 pm, [email protected] wrote:

How do I get “un ’ monton ’ de ’ apostrofes '” from “un ’ monton ’
de ’ apostrofes '”? using regex?

Like this:

st = “un ’ monton ’ de ’ apostrofes '”
=> “un ’ monton ’ de ’ apostrofes '”

st.gsub(/’/, “\\’”)
=> “un \’ monton \’ de \’ apostrofes \’”

It just displays with \ in there because it needs to escape the
itself when displaying it. Any manipulations you need to do on the
actual string object will only see a single ‘’ character rather than
a double.

s = “’”
=> “’”

s.gsub!(/’/, “\\’”)
=> “\’”

s.length
=> 2

s[0].chr
=> “\”

s[1].chr
=> “’”

Jon

[email protected] wrote:

irb(main):003:0> sst = st.gsub(/'/,“'”)

You can really confuse the heck out of yourself this way. There are two
problems:

(1) Backslashes must be escaped in a double-quoted string.

(2) gsub has special behavior unlike anything else in Ruby: backslashes
are unescaped in the second parameter, regardless of the quoting.

So, if you want one backslash to be substituted, and if you insist on
double-quoting, you have to type four backslashes:

irb(main):003:0> puts “hello”.gsub(“e”,“\\”)
h\llo

For the workaround, check this recent thread:

<http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/d8f4
74e7f2959585/9cadabc099a27925?lnk=st&q=#9cadabc099a27925>

m.