Ruby - Escape括号

Tod*_*tyz 6 ruby ruby-on-rails

我不能为我的生活弄清楚这一点,即使它应该很简单.

我怎么能代替所有出现"(",并")"与一个字符串"\(""\)"

似乎没有任何作用:

"foo ( bar ) foo".gsub("(", "\(") # => "foo ( bar ) foo"

"foo ( bar ) foo".gsub("(", "\\(") # => "foo \\( bar ) foo"
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Mar*_*ers 5

您已经在第二次尝试中找到了解决方案,您只是感到困惑,因为字符串在交互式解释器中以转义形式显示。但实际上只有一个反斜杠而不是两个。尝试使用 puts 打印它,您会看到实际上只有一个反斜杠:

> "foo ( bar ) foo".gsub("(", "\\(")
=> "foo \\( bar ) foo"
> puts "foo ( bar ) foo".gsub("(", "\\(")
foo \( bar ) foo
Run Code Online (Sandbox Code Playgroud)

如果您需要进一步的说服力,请尝试取字符串的长度:

> "foo ( bar ) foo".length
=> 15
> "foo ( bar ) foo".gsub("(", "\\(").length
=> 16
Run Code Online (Sandbox Code Playgroud)

如果它添加了两个反斜杠,它将打印 17 而不是 16。