转义ruby字符串

转义ruby字符串,ruby,string,gsub,Ruby,String,Gsub,我有一个带两个单引号的字符串。i、 e“女士的女士的” 我想逃避引用,所以我得到了:“女士的女士的” 我尝试了以下方法: > "lady's lady's".gsub("'", "\\'") => "ladys lady'ss ladyss" > "lady's lady's".gsub("'", "\\\\'") => "lady\\'s lady\\'s" > "lady's lady's".gsub("'", "\'") => "lady'

我有一个带两个单引号的字符串。i、 e“女士的女士的”

我想逃避引用,所以我得到了:“女士的女士的”

我尝试了以下方法:

> "lady's lady's".gsub("'", "\\'")
 => "ladys lady'ss ladyss" 

> "lady's lady's".gsub("'", "\\\\'")
 => "lady\\'s lady\\'s" 

> "lady's lady's".gsub("'", "\'")
 => "lady's lady's" 
有什么帮助吗

"lady's lady's".gsub("'", "\\\\'") # => "lady\\'s lady\\'s"
如@Neil所述,见下文:

"lady's lady's".gsub(/'/, "\\\\\'").chars.to_a 
# => ["l",
#     "a",
#     "d",
#     "y",
#     "\\",
#     "'",
#     "s",
#     " ",
#     "l",
#     "a",
#     "d",
#     "y",
#     "\\",
#     "'",
#     "s"]

传统上,需要转义的字符是非字母数字。例如,Perl对不是数字、字母或下划线的所有内容进行转义

您可以使用
gsub
复制此行为:

str = "lady's lady's"

puts str.gsub(/(?=\W)/, '\\')
输出

lady\'s\ lady\'s
如果您特别不想让撇号转义,那么正则表达式很容易更改,将
(?=\W)
替换为
(?=')


注意

结果

> "lady's lady's".gsub("'", "\\'")
 => "ladys lady'ss ladyss" 
这是因为使用
«\'»
的文字替换字符串将每个撇号替换为全局变量
$'
的值-匹配后的字符串

因此,第一个撇号被替换为
«s lady's
,第二个被替换为
«s»
,从而产生了奇异的
«ladys ladys»

您必须使用
«\\'»
的文本替换字符串来替换为
«\'»

使用“向前看”和避免替换撇号更为简洁:

> puts "lady's lady's".gsub(/(?=')/, '\\')
lady\'s lady\'s
=> nil

这不是我要找的。它有两个“\”我正在寻找:“女士的女士的”。@Tony:
“女士的女士的”.gsub(/“/”,“\\\”))。字符。to\u a
表明显示的两个“\\”在irb中只是一个人工制品。我认为这是正确的答案@尼尔·斯莱特:不是。字符串
“\\\\\”
是两个反斜杠。尝试
放置“\\\”。长度
。事实上,
“\\\\”
是两个反斜杠,后跟一个不必要的转义撇号。@Borodin:Try
”.gsub(“”,“\\\”)。长度
:-)
“\”
等于
,所以我觉得
“lady\\\\\\\\\\\\\\\\\\\\\\\\”,可能就是你想要的。但是
irb
pry
以转义方式打印它。我确实认为这个正则表达式更容易看。另外,你对“女士”结果的解释值得加入到这个答案中。@NeilSlater我应该删除我的帖子吗?@NeilSlater:很好。完成。@Priti:不,我不这么认为。我经常喜欢看到有趣的问题的多个答案。除此之外,这是公认的答案。