From: Alain FELER Date: 2006-02-08T06:43:21+09:00 Subject: Re: regex trick 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 >