• ベストアンサー

Rubyで\を\\に置換したい。

Rubyで"\"マークを"\\"に置換しようとして、以下の様に プログラムを書きましたが、うまくいきません。 "\\aaa"となるようにするには、どうしたらよいでしょうか? %cat aa.txt \aaa %a aa.txt \aaa %cat a #!/usr/bin/ruby while l = gets print l.gsub(/\\/,'\\\\') end

質問者が選んだベストアンサー

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

x = l.gsub(/\\/,"\\\\\\\\") か x = l.gsub(/\\/) {"\\\\"} の何れかで期待した結果が 得られます。 rubyの場合の正規表現による置換は 1.文字列のメタ文字の解釈(スクリプトコンパイル時) 2.sub, gsub 実行時の正規表現へのコンパイル(正規表現のメタ文字の解釈) が順に行われる為、l.gsub(/\\/,'\\\\') の場合の'\\\\'は最終的に\1文字となってしまいます。 詳しくは、参考URLを参照下さい。

参考URL:
http://www.ruby-lang.org/ja/man/index.cgi?cmd=view;name=trap%3A%3A%5C%A4%CE%B1%C6%B6%C1
mr_flogman
質問者

お礼

x = l.gsub(/\\/,"\\\\\\\\") x = l.gsub(/\\/) {"\\\\"} 両方ためしたところ、望む結果になりました。 Perlと同じやり方で考えていましたので、 なかなか思う結果になりませんでした。。。 大変勉強になりました。 ありがとうございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

print l.gsub(/\\/,'\\\\') を print l.gsub(/(\\)/,'\1\1') にする

mr_flogman
質問者

お礼

なるほど、後方参照を使う手もありますね。 参考になりました。 ありがとうございました。

関連するQ&A