逃离红宝石串

Ton*_*ony 2 ruby string gsub

我有一个带有两个单引号的字符串.即"女士的女士"

我想逃避引用,所以我得到:"女士的女士们".

我尝试过以下方法:

> "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)

有帮助吗?

Bor*_*din 5

传统上,需要转义的字符是非字母数字.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)