转义ruby字符串
我有一个带两个单引号的字符串。i、 e“女士的女士的” 我想逃避引用,所以我得到了:“女士的女士的” 我尝试了以下方法:转义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'
> "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:不,我不这么认为。我经常喜欢看到有趣的问题的多个答案。除此之外,这是公认的答案。