如何在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