我正在尝试用 ruby 1.9.3 和 1.8.7 中的字符串中的转义单引号 (\') 替换单引号 (')。
确切的问题字符串是“您确定要删除 '%@'”。这个字符串应该变成“你确定要删除\'%@\'”
使用 .gsub!(/\'/,"\'") 会导致以下字符串“Are you sure you want to %@'%@”。
关于发生了什么的任何想法?
String#gsub
表单gsub(exp,replacement)
中有奇怪的怪癖影响替换字符串,有时需要大量转义斜杠。Ruby 用户经常被指示使用块形式:
str.gsub(/'/){ "\\'" }
如果您想完全取消转义,请考虑使用另一种字符串文字形式:
str.gsub(/'/){ %q(\') }
一旦你习惯了看到这些类型的文字,使用它们来避免转义序列可以使你的代码更具可读性。
\'
在替换替换字符串中的意思是“匹配后的原始字符串部分”。所以用它之后str.gsub!(/\'/,"\\'")
的所有东西替换'
字符 - 这就是你所注意到的。
您需要在替换中进一步转义反斜杠。.gsub(/'/,"\\\\'")
在我的irb
控制台中工作:
irb(main):059:0> puts a.gsub(/'/,"\\\\'")
Are you sure you want to delete \'%@\'
您需要转义反斜杠。那这个呢?
"Are you sure you want to delete '%@'".gsub(/(?=')/, "\\")
# => "Are you sure you want to delete \\'%@\\'"
以上应该是你想要的。你的预期结果是错误的。当它的字面意思是反斜杠时,没有办法从字面上看到一个反斜杠。