文字列内の二重のバックスラッシュを単一のバックスラッシュに置き換えるにはどうすればよいですか?
でやろうとしていたのですが、うまくいき"\\a\\b\\c".gsub!("\\\\","\\")
ません。
ルビ文字列では、バックスラッシュは「エスケープ シーケンス」を開始する特別な最初の文字であるため、次のようになります。
\\ - means single backslash
この例をよりよく理解するには、次のことが役立ちます。
>> s = "\\ha"
=> "\\ha"
>> s.split(//)
=> ["\\", "h", "a"]
ご覧のとおり、3 文字しかありません。最初の文字は、エスケープ シーケンスで表される 1 つのバックスラッシュです。\\
>> s.gsub!("\\","\\\\\\")
=> "\\\\ha"
>> s.split(//)
=> ["\\", "\\", "h", "a"]
文字列は 4 文字になり、最初と 2 番目はバックスラッシュです。
>> s.gsub!("\\\\","\\")
=> "\\ha"
>> s.split(//)
=> ["\\", "h", "a"]
上記の例は、ruby 1.8.7、irb 0.9.5 を使用してテストされています。
私はルビーについて何も知らないので、ワイルドな推測:
バックスラッシュが文字列内で特別な意味を持っているのではないでしょうか? これを試してみてください:
"\a\b\c".gsub!("\\\\","\\")