重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Rubyで"\"マークを"\\"に置換しようとして、以下の様に
プログラムを書きましたが、うまくいきません。
"\\aaa"となるようにするには、どうしたらよいでしょうか?

%cat aa.txt
\aaa
%a aa.txt
\aaa
%cat a
#!/usr/bin/ruby
while l = gets
print l.gsub(/\\/,'\\\\')
end

A 回答 (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=vi …
    • good
    • 0
この回答へのお礼

x = l.gsub(/\\/,"\\\\\\\\")
x = l.gsub(/\\/) {"\\\\"}
両方ためしたところ、望む結果になりました。

Perlと同じやり方で考えていましたので、
なかなか思う結果になりませんでした。。。
大変勉強になりました。
ありがとうございました。

お礼日時:2004/12/01 05:57

print l.gsub(/\\/,'\\\\')



print l.gsub(/(\\)/,'\1\1')
にする
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/01 05:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!