我有个小问题困扰着我.我需要将字符串中的每个反斜杠都加倍,例如,如果字符串为1 \ 2,我希望将其转换为1 \\ 2.我不明白下面的代码为什么会失败.你能帮忙吗?PS.请不要告诉我拆分字符并在列表元素上操作,然后连接;)我需要知道这是sub中的错误还是我遗漏了什么.再见

irb> s = '1 \\ 2'
irb> puts s
1 \ 2
irb> s.size 
5
irb> s[2]
"\\"
# now i try to do the substitution
irb> s2 = s.sub('\\', '\\'*2)   # or '\\\\'
"1 \\ 2"
irb> s2.size
5

推荐答案

请注意,\\被解释为转义,即单个反斜杠.

另请注意,字符串文字会消耗反斜杠.有关字符串文字的详细信息,请参阅字符串文字.

反引用的前面通常有一个附加的反斜杠.例如,如果要编写一个反向引用\&来替换双引号字符串文字,则需要编写"..\\&..".

如果要在replacement,you need first to escape the backslash to prevent this method from interpreting it as a back-reference, and then you need to escape the backslashes again to prevent a string literal from consuming them:"..\\\\&.."中写入非反向引用字符串\&.

100

这意味着你需要更多的反斜杠:

>> "1 \\ 2".sub("\\", "\\"*4)
=> "1 \\\\ 2"
# or
>> "1 \\ 2".sub("\\", Regexp.escape("\\\\"))
=> "1 \\\\ 2"

Ruby相关问答推荐

我可以在Ruby中以散列的形式访问方法的关键字参数吗?

在 ruby​​ 中提取文档中的主题标签和部分

Ruby符号前面的-是什么意思?

Rack::Request - 如何获取所有标头?

Python 正则表达式是否等同于 Ruby 的原子分组?

在 YAML 变量中包含 jekyll / liquid 模板数据?

Rails 控制台中没有数据库连接

Ruby:获取不带扩展名的文件名

Ruby中的常量或类变量?

铲子 (<<) 运算符如何在 Ruby 哈希中工作?

为什么 Ruby 没有真正的 StringBuffer 或 StringIO?

如何在 Ruby 脚本中运行 Rake 任务?

判断字符串是否为空的Ruby方法?

Ruby NOT Rails 中有复数函数吗?

如何转换 Ruby 哈希,使其所有键都是符号?

如何将多个元素添加到数组中?

解析带有标题字段的 CSV 文件作为每行的属性

未加载库:/opt/local/lib/libssl.1.0.0.dylib (LoadError)

将哈希传递给函数 ( *args ) 及其含义

Ruby:从 Ruby 中的变量创建哈希键和值