Regex trick

I want to replace all ' by \' ? (I need it to do inserts in mysql).
> s = "j'ai"
> s.gsub!(/'/,'\'')
> p s ==> gives j'ai and not j\'ai as I want
Thanks for help.

s.gsub!("'", "\\\\'")

should do the trick.

Regards,
  Stefan

···

On Monday, February 06, 2006, at 7:08 AM, Alain FELER wrote:

I want to replace all ' by \' ? (I need it to do inserts in mysql).
> s = "j'ai"
> s.gsub!(/'/,'\'')
> p s ==> gives j'ai and not j\'ai as I want
Thanks for help.

--
Posted with http://DevLists.com. Sign up and save your time!

s.gsub!(/'/, "\\\\'")

or

s.gsub!(/'/) { "\\'" }

will do what you want

Hope this helps,

Mike

···

On 5-Feb-06, at 5:08 PM, Alain FELER wrote:

I want to replace all ' by \' ? (I need it to do inserts in mysql).
> s = "j'ai"
> s.gsub!(/'/,'\'')
> p s ==> gives j'ai and not j\'ai as I want
Thanks for help.

--

Mike Stok <mike@stok.co.uk>
http://www.stok.co.uk/~mike/

The "`Stok' disclaimers" apply.

Alain FELER wrote:

I want to replace all ' by \' ? (I need it to do inserts in mysql).
> s = "j'ai"
> s.gsub!(/'/,'\'')
> p s ==> gives j'ai and not j\'ai as I want
Thanks for help.

irb(main):011:0> s = "j'ai"
=> "j'ai"
irb(main):012:0> puts s.sub(/'/) { '\\\'' }
j\'ai
=> nil
irb(main):013:0>

What interface to MySQL are you using? I know that the Ruby DBI module allows you to use place-holders in queries, and the DBI layer does the escaping for you e.g.

    dbh.do("INSERT INTO people (id, name, height) VALUES(?, ?, ?)",
            nil, "Na'il", 76)

  The resulting statement produced by do and sent to the server looks like this:

    INSERT INTO people (id,name,height) VALUES(NULL,'Na\'il',76)

(stolen from http://www.kitebird.com/articles/ruby-dbi.html\) or if you are using the ruby mysql interface then (from http://www.kitebird.com/articles/ruby-mysql.html\)

   Using escape_string, the platypus record might be inserted as follows:

    name = dbh.escape_string("platypus")
    category = dbh.escape_string("don't know")
    dbh.query("INSERT INTO animal (name, category)
            VALUES ('" + name + "','" + category + "')")

Hope this helps,

Mike

···

On 5-Feb-06, at 5:08 PM, Alain FELER wrote:

I want to replace all ' by \' ? (I need it to do inserts in mysql).
> s = "j'ai"
> s.gsub!(/'/,'\'')
> p s ==> gives j'ai and not j\'ai as I want
Thanks for help.

--

Mike Stok <mike@stok.co.uk>
http://www.stok.co.uk/~mike/

The "`Stok' disclaimers" apply.

Thank you very much for these four answers, but curiously none works on my box ! :
Stefan Lang : s.gsub!("'", "\\\\'") gives "j\\'ai" not "j\'ai"
Timothy Hunter : s.sub(/'/) { '\\\'' } gives "j\\'ai"
you : s.gsub!(/'/, "\\\\'") gives "j\\'ai"
and : s.gsub!(/'/) { "\\'" } gives "j'ai"
(I am using ruby 1.8.2.14 on Windows 2000 configured in french,
and I can't even type the {} characters in irb, but I tried with Scite)
However the ruby mysql interface escape_string method works fine.
Thank you.
AF

Mike Stok a écrit :

···

On 5-Feb-06, at 5:08 PM, Alain FELER wrote:

I want to replace all ' by \' ? (I need it to do inserts in mysql).
> s = "j'ai"
> s.gsub!(/'/,'\'')
> p s ==> gives j'ai and not j\'ai as I want
Thanks for help.

What interface to MySQL are you using? I know that the Ruby DBI module allows you to use place-holders in queries, and the DBI layer does the escaping for you e.g.

   dbh.do("INSERT INTO people (id, name, height) VALUES(?, ?, ?)",
           nil, "Na'il", 76)

The resulting statement produced by do and sent to the server looks like this:

   INSERT INTO people (id,name,height) VALUES(NULL,'Na\'il',76)

(stolen from http://www.kitebird.com/articles/ruby-dbi.html\) or if you are using the ruby mysql interface then (from http:// www.kitebird.com/articles/ruby-mysql.html)

  Using escape_string, the platypus record might be inserted as follows:

   name = dbh.escape_string("platypus")
   category = dbh.escape_string("don't know")
   dbh.query("INSERT INTO animal (name, category)
           VALUES ('" + name + "','" + category + "')")

Hope this helps,

Mike

Thank you very much for these four answers, but curiously none works on my box ! :

Incorrect. They all work.

p "j\\'ai"
"j\\'ai"
puts "j\\'ai"
j\'ai

Stefan Lang : s.gsub!("'", "\\\\'") gives "j\\'ai" not "j\'ai"

puts "j'ai".gsub("'", "\\\\'")
j\'ai

Timothy Hunter : s.sub(/'/) { '\\\'' } gives "j\\'ai"

puts "j'ai".gsub(/'/) { '\\\'' }
j\'ai

you : s.gsub!(/'/, "\\\\'") gives "j\\'ai"

puts "j'ai".gsub(/'/, "\\\\'")
j\'ai

and : s.gsub!(/'/) { "\\'" } gives "j'ai"

puts "j'ai".gsub(/'/) { "\\'" }
j\'ai

···

On Feb 7, 2006, at 1:43 PM, Alain FELER wrote:

--
Eric Hodel - drbrain@segment7.net - http://segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com

Well, sorry:
> p s gives "j\\'ai"
> puts s gives j\'ai
> print s gives j\'ai
so every four methods work if the result is properly printed
AF

Alain FELER a écrit :

···

Thank you very much for these four answers, but curiously none works on my box ! :
Stefan Lang : s.gsub!("'", "\\\\'") gives "j\\'ai" not "j\'ai"
Timothy Hunter : s.sub(/'/) { '\\\'' } gives "j\\'ai"
you : s.gsub!(/'/, "\\\\'") gives "j\\'ai"
and : s.gsub!(/'/) { "\\'" } gives "j'ai"
(I am using ruby 1.8.2.14 on Windows 2000 configured in french,
and I can't even type the {} characters in irb, but I tried with Scite)
However the ruby mysql interface escape_string method works fine.
Thank you.
AF

Mike Stok a écrit :

On 5-Feb-06, at 5:08 PM, Alain FELER wrote:

I want to replace all ' by \' ? (I need it to do inserts in mysql).
> s = "j'ai"
> s.gsub!(/'/,'\'')
> p s ==> gives j'ai and not j\'ai as I want
Thanks for help.

What interface to MySQL are you using? I know that the Ruby DBI module allows you to use place-holders in queries, and the DBI layer does the escaping for you e.g.

   dbh.do("INSERT INTO people (id, name, height) VALUES(?, ?, ?)",
           nil, "Na'il", 76)

The resulting statement produced by do and sent to the server looks like this:

   INSERT INTO people (id,name,height) VALUES(NULL,'Na\'il',76)

(stolen from http://www.kitebird.com/articles/ruby-dbi.html\) or if you are using the ruby mysql interface then (from http:// www.kitebird.com/articles/ruby-mysql.html)

  Using escape_string, the platypus record might be inserted as follows:

   name = dbh.escape_string("platypus")
   category = dbh.escape_string("don't know")
   dbh.query("INSERT INTO animal (name, category)
           VALUES ('" + name + "','" + category + "')")

Hope this helps,

Mike