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

如何在Ruby中向字符串添加单个反斜杠字符?,ruby,string,Ruby,String,我想在“儿童世界”字符串中的撇号前插入反斜杠。有没有简单的方法 irb(main):035:0> s = "children's world" => "children's world" irb(main):036:0> s.gsub('\'', '\\\'') => "childrens worlds world" 您的问题是字符串“\”对替换字符串中的gsub有意义。为了使它按您想要的方式工作,您必须使用块形式 s.gsub("'") {"\\'"} 关于gsub

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

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

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

s.gsub("'") {"\\'"}
关于
gsub的替换模式,请参见:

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

这包括序列
\'
,这意味着“所有内容都遵循我匹配的内容”

无论是
“\\'”
还是
“\\\'
都将产生
\\'
(请记住,
\
必须在双引号和单引号字符串中转义,而
'
必须在单引号字符串中转义,因此在本例中使用单引号实际上会使事情更加冗长)。例如:

然后,您希望gsub
看到的实际上是
\\'
,它可以由
“\\\\\”
生成。因此:

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

puts s.gsub("'", '\\\\\'')
children\'s world
或者,如果您必须大量使用
\
,您可以利用这样一个事实,即当您使用
/…/
(或
%r{…}
)时,您不必双重转义反斜杠:

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

@Jirapong您认为它得到\\的原因是rails控制台不显示字符串,而是显示如何构造字符串。因此,如果您输入“\\”,它将显示“\\”事件,尽管它是一个带有单个反斜杠的字符串。要发现字符串中真正的内容,应该使用puts。例如,puts“\\”将显示一个反斜杠。这对我来说是正确的答案。我疯狂地想ruby不允许我做一个反斜杠,直到我做了:
“\\\”.length=>1
puts s.gsub("'", "\\\\'")
children\'s world

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