0

文字列内の二重のバックスラッシュを単一のバックスラッシュに置き換えるにはどうすればよいですか?

でやろうとしていたのですが、うまくいき"\\a\\b\\c".gsub!("\\\\","\\")ません。

4

2 に答える 2

0

ルビ文字列では、バックスラッシュは「エスケープ シーケンス」を開始する特別な最初の文字であるため、次のようになります。

\\ - means single backslash

この例をよりよく理解するには、次のことが役立ちます。

  >> s = "\\ha"
  => "\\ha"
  >> s.split(//)
  => ["\\", "h", "a"]

ご覧のとおり、3 文字しかありません。最初の文字は、エスケープ シーケンスで表される 1 つのバックスラッシュです。\\

ここで、単一のバックスラッシュを二重のバックスラッシュに置き換えます

   >> s.gsub!("\\","\\\\\\")
   => "\\\\ha"
   >> s.split(//)
   => ["\\", "\\", "h", "a"]

文字列は 4 文字になり、最初と 2 番目はバックスラッシュです。

ここで、2 つのバックスラッシュを 1 つのバックスラッシュに置き換えることで、元の文字列に戻ります。

   >> s.gsub!("\\\\","\\")
   => "\\ha" 
   >> s.split(//)
   => ["\\", "h", "a"]

上記の例は、ruby 1.8.7、irb 0.9.5 を使用してテストされています。

于 2012-08-08T10:58:07.173 に答える
0

私はルビーについて何も知らないので、ワイルドな推測:

バックスラッシュが文字列内で特別な意味を持っているのではないでしょうか? これを試してみてください:

"\a\b\c".gsub!("\\\\","\\")
于 2012-07-14T10:16:36.460 に答える