如何在Ruby中为字符串添加单个反斜杠字符?

时间:2009-04-04 08:26:10

标签: ruby string

我想在“儿童世界”字符串中的撇号之前插入反斜杠。有没有简单的方法呢?

irb(main):035:0> s = "children's world"
=> "children's world"
irb(main):036:0> s.gsub('\'', '\\\'')
=> "childrens worlds world"

3 个答案:

答案 0 :(得分:14)

来自ruby-doc.org关于gsub的替换模式:

  

序列\ 1,\ 2等可用于在匹配中插入连续的组

这包括序列\',这意味着“一切都跟着我匹配”。

"\\'"'\\\''都会生成\'(请记住\必须在双单引号字符串中进行转义,并且'必须在单引号字符串中进行转义,因此在这种情况下使用单引号实际上会使更多更详细。 E.g:

puts "before*after".gsub("*", "\\'")
"beforeafterafter"

puts "before*after".gsub("*", '\\\'')
"beforeafterafter"

您希望gsub看到的内容实际上是\\',可由"\\\\'"'\\\\\''生成。所以:

puts s.gsub("'", "\\\\'")
children\'s world

puts s.gsub("'", '\\\\\'')
children\'s world

或者如果你必须对\做很多事情,你可以利用这样一个事实:当你使用/.../(或%r{...})时,你不必双重逃脱反斜杠:

puts s.gsub("'", /\\'/.source)
children\'s world

答案 1 :(得分:4)

>> puts s.gsub("'", "\\\\'")
children\'s world

答案 2 :(得分:1)

您的问题是字符串“\”对替换字符串中的gsub有意义。为了使其按照您想要的方式工作,您必须使用块形式。

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