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%工作的解决方案
答案 0 :(得分:0)
sub
和gsub
处理的序列为documented,如&#39; \ 1&#39;在替换字符串中有一种特殊的方式:
如果替换是一个字符串,它将替换匹配的字符串 文本。它可能包含对模式捕获组的反向引用 形式&#34; \ d&#34;,其中d是组号,或&#34; \ k&#34;,其中n是a 组名。
您可以在块样式中使用sub
和gsub
。该块需要返回应该替换的字符串。
"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 \`