我想在“儿童世界”字符串中的撇号之前插入反斜杠。有没有简单的方法呢?
irb(main):035:0> s = "children's world"
=> "children's world"
irb(main):036:0> s.gsub('\'', '\\\'')
=> "childrens worlds world"
答案 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("'") {"\\'"}