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

12 ruby string

我想在"儿童世界"字符串中的撇号之前插入反斜杠.有一个简单的方法吗?

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

Jor*_*ugh 14

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

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

这包括序列\',这意味着"一切都跟着我匹配".

无论是"\\'"'\\\''将两者的农产品\'(记住,\有两个双转义单引号的字符串,而'在单引号字符串进行转义,所以使用单引号在这种情况下,实际上使事情变得详细).例如:

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

puts "before*after".gsub("*", '\\\'')
"beforeafterafter"
Run Code Online (Sandbox Code Playgroud)

你想要gsub看到的实际上是\\',这可以由两者"\\\\'"'\\\\\''.所以:

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

puts s.gsub("'", '\\\\\'')
children\'s world
Run Code Online (Sandbox Code Playgroud)

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

puts s.gsub("'", /\\'/.source)
children\'s world
Run Code Online (Sandbox Code Playgroud)


Mag*_*nar 5

>> puts s.gsub("'", "\\\\'")
children\'s world
Run Code Online (Sandbox Code Playgroud)

  • @Jirapong 你认为它得到 \\ 的原因是因为 rails 控制台不显示字符串,而是显示如何构造字符串。因此,如果您输入“\\”,它将显示“\\”事件,尽管它是一个带有单个反斜杠的字符串。要发现字符串中的真实内容,您应该使用 **puts**。例如, puts "\\" 将显示一个反斜杠。 (6认同)

Chu*_*uck 1

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

s.gsub("'") {"\\'"}
Run Code Online (Sandbox Code Playgroud)