逃避Ruby

时间:2017-07-27 12:26:24

标签: ruby

我有一个字符串:

"hello\n\nsomeletters\t\nmoreletters\n"

我想要的是什么:

"hello\\n\\nsomeletters\\t\\nmoreletters\\n"

怎么做?

我知道gsub方式。但这听起来很简单,似乎是一个普遍的问题,因此我确信Ruby Gods已经向我们发送了一个解决方案。

1 个答案:

答案 0 :(得分:1)

有不同的可能性。最接近您想要的是Regexp#escape

Regexp.escape "hello\n\nsomeletters\t\nmoreletters\n"
#⇒ "hello\\n\\nsomeletters\\t\\nmoreletters\\n"

但请注意,它会逃避其他一些在正则表达式中具有特殊含义的符号。

另外,我们有Shellwords#escape,这可能不是你想要的。

仅用于转义反斜杠没有专用方法,因为这个操作基本上没什么意义,不值得调用它而不是:

"hello\n\nsomeletters\t\nmoreletters\n".gsub(
    /\n|\t/, {"\n" => "\\n", "\t" => "\\t"}
)

请注意,初始字符串中有没有斜线字符,因此您要匹配所有预期的序列。