Ruby 中怎样做到 String replace all substring? gsub?
# 注意我这里的' \" '不是为了转义双引号,而就是为了表达\和"两个字符
'site=|http://jex.im/|'.gsub '|','\"' # ok ?
# => "site=\\\"http://jex.im/\\\""
想当然地这样写不小心就踩中地雷了 看下面的代码结果:
# 注意我这里的' \& '不是为了转义&,而就是为了表达\和&两个字符
'site=|http://jex.im/|'.gsub '|','\"'
# => "site=|quot;http://jex.im/|quot;"
你竟然需要这么写才能得到正确结果:TOT
'site=|http://jex.im/|'.gsub('|') { '\"' }
# => "site=\\"http://jex.im/\\""
坑爹啊!!!!!!!!!!!!!!!!!! 想想假如你的 replacement string 是从外部获得的,你不知道里面有'\1,&'这样的 back reference,结果会多么令人崩溃啊!!!! (注意上面的'\1,&'显示不正确,"&"前面的"\"被吃掉了,Ruby China 的 BUG 么?)
括弧,其实我的另类解决方案是这样的:
s.split(substr).join(replacement)
同样,gsub! 和 sub 以及 sub! 方法都有这样的坑。只有 [] 方法不会这样
s["abc"]=replacement