- ベストアンサー
Rubyで\を\\に置換したい。
Rubyで"\"マークを"\\"に置換しようとして、以下の様に プログラムを書きましたが、うまくいきません。 "\\aaa"となるようにするには、どうしたらよいでしょうか? %cat aa.txt \aaa %a aa.txt \aaa %cat a #!/usr/bin/ruby while l = gets print l.gsub(/\\/,'\\\\') end
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
x = l.gsub(/\\/,"\\\\\\\\") か x = l.gsub(/\\/) {"\\\\"} の何れかで期待した結果が 得られます。 rubyの場合の正規表現による置換は 1.文字列のメタ文字の解釈(スクリプトコンパイル時) 2.sub, gsub 実行時の正規表現へのコンパイル(正規表現のメタ文字の解釈) が順に行われる為、l.gsub(/\\/,'\\\\') の場合の'\\\\'は最終的に\1文字となってしまいます。 詳しくは、参考URLを参照下さい。
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
回答No.1
print l.gsub(/\\/,'\\\\') を print l.gsub(/(\\)/,'\1\1') にする
質問者
お礼
なるほど、後方参照を使う手もありますね。 参考になりました。 ありがとうございました。
お礼
x = l.gsub(/\\/,"\\\\\\\\") x = l.gsub(/\\/) {"\\\\"} 両方ためしたところ、望む結果になりました。 Perlと同じやり方で考えていましたので、 なかなか思う結果になりませんでした。。。 大変勉強になりました。 ありがとうございました。