开发者

Ruby gsub doesn't escape single-quotes

开发者 https://www.devze.com 2022-12-19 00:29 出处:网络
I don\'t understand what is going on here. How should I feed gsub to get the string \"Yaho\\\'o\"? >> \"Yaho\'o\".gsub(\"Y\", \"\\\\开发者_运维问答Y\")

I don't understand what is going on here. How should I feed gsub to get the string "Yaho\'o"?

>> "Yaho'o".gsub("Y", "\\开发者_运维问答Y")
=> "\\Yaho'o"
>> "Yaho'o".gsub("'", "\\'")
=> "Yahooo"


\' means $' which is everything after the match. Escape the \ again and it works

"Yaho'o".gsub("'", "\\\\'")


"Yaho'o".gsub("'", "\\\\'")

Because you're escaping the escape character as well as escaping the single quote.


This will also do it, and it's a bit more readable:

def escape_single_quotes(str)
  str.gsub(/'/) { |x| "\\#{x}" }
end

If you want to escape both a single-quote and a backslash, so that you can embed that string in a double-quoted ruby string, then the following will do that for you:

def escape_single_quotes_and_backslash(str)
  str.gsub(/\\|'/) { |x| "\\#{x}" }
end
0

精彩评论

暂无评论...
验证码 换一张
取 消