红宝石。 Gsub单斜线组合\& \' \ + \ 0

时间:2015-11-16 00:56:18

标签: ruby-2.0

   bang=[]
    (33..126).each{|x| bang<<x.chr}
    block=bang.repeated_permutation(2) 

for i in 1..8836
       x=block.next.join
       if not "x".gsub("x",x).size==2
          puts x 
       end 
    end

OUTPUT =&GT;

   \&
    \'
    \+
    \0
    \1
    \2
    \3
    \4
    \5
    \6
    \7
    \8
    \9
    \\
    \`

因此。这里有一个。显示导致gsub失败的特殊字符的小脚本...我希望找到一个让gsub 100%工作的解决方案

2 个答案:

答案 0 :(得分:0)

subgsub处理的序列为documented,如&#39; \ 1&#39;在替换字符串中有一种特殊的方式:

  

如果替换是一个字符串,它将替换匹配的字符串   文本。它可能包含对模式捕获组的反向引用   形式&#34; \ d&#34;,其中d是组号,或&#34; \ k&#34;,其中n是a   组名。

您可以在块样式中使用subgsub。该块需要返回应该替换的字符串。

"x".sub("x"){|match| '\1'}
=> '\1'    # or outputted as "\\1"

"x".sub("x"){|match| '\1'}.size
=> 2

答案 1 :(得分:0)

这是我解决这个问题的方法......如果有人遇到同样的问题。

    puts "ruby rules !".gsub("!"){"\\&"}=>
   #ruby rules \& 
   #ruby rules \' 
   #ruby rules \+ 
   #ruby rules \0 
   #ruby rules \1 
   #ruby rules \2 
   #ruby rules \3 
   #ruby rules \4 
   #ruby rules \5 
   #ruby rules \6 
   #ruby rules \7 
   #ruby rules \8 
   #ruby rules \9 
   #ruby rules \\ 
   #ruby rules \`