我有一个带有两个单引号的字符串.即"女士的女士"
我想逃避引用,所以我得到:"女士的女士们".
我尝试过以下方法:
> "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"
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
传统上,需要转义的字符是非字母数字.quotemeta例如,Perl 可以逃避所有不是数字,字母或下划线的内容.
您可以使用gsub以下命令复制此行为:
str = "lady's lady's"
puts str.gsub(/(?=\W)/, '\\')
Run Code Online (Sandbox Code Playgroud)
产量
lady\'s\ lady\'s
Run Code Online (Sandbox Code Playgroud)
如果你特别想要除撇号之外的任何东西,那么正则表达式很容易改变,取而代之的(?=\W)是(?=').
注意
结果
> "lady's lady's".gsub("'", "\\'")
=> "ladys lady'ss ladyss"
Run Code Online (Sandbox Code Playgroud)
是因为使用文字替换字符串«\'»将每个撇号替换为全局变量的值$'- 匹配后的字符串.
因此第一个撇号被替换«s lady's»为第二个撇号«s»,导致奇怪的«ladys lady'ss ladyss».
你必须使用一个文字替换字符串«\\'»来替换just«\'»
使用前瞻并避免更换撇号更加简洁:
> puts "lady's lady's".gsub(/(?=')/, '\\')
lady\'s lady\'s
=> nil
Run Code Online (Sandbox Code Playgroud)