2012-04-10 11 views
6

私は文字列str = "xyz\123"を持っているので、そのまま印刷したいと思います。Rubyで逆スラッシュの文字列を印刷するには

IRBが私に予期せぬ出力を与えています。 -

1.9.2p290 :003 > str = "xyz\123" 
=> "xyzS" 
1.9.2p290 :004 > 

IRBに元の文字列「xyz \ 123」を印刷させるには、どのようなアイディアが必要ですか?

は...

UPDATEありがとう:

を私はそれをエスケープしようとしたが、いくつかの理由のために、単純なように見えるしません。同じと私の試練の下に見つけてください:

1.9.2p290 :004 > str = "xyz'\'123" 
=> "xyz''123" 
1.9.2p290 :005 > str = "xyz'\\'123" 
=> "xyz'\\'123" 
1.9.2p290 :006 > str = "xyz'\\\'123" 
=> "xyz'\\'123" 
1.9.2p290 :007 > 
+1

「ちょうどエスケープする」または、「チュートリアルを読む」。ピックを取る。あなたは '.inspect'も望むかもしれません。 –

+1

私はこの質問が投票された理由を不思議です。 – boddhisattva

答えて

5

UPDATED答:

エスケープトークンを「\」は常にプレーンなRubyコードで作業が、常に「ルビーコンソール」で働いていません。

# escape_token_test.rb 
require 'test/unit' 
class EscapeTokenTest < Test::Unit::TestCase 
    def test_how_to_escape 
    hi = "hi\\backslash" 
    puts hi 
    end 
end 

を、あなたはその結果を取得します:私はあなたがユニットテストを書く示唆

hi\backslash 

と@のpstファイルのコメントを参照してください。

+1

私はこれを試しました、それは動作しません。バックスラッシュを2回印刷します。出力: "xyz \\ 123" – boddhisattva

+0

@boddhisattvaそれは正しいです。 Hophatの答えの私のコメントを参照してください。 –

+0

@boddhisattva、私は私の答えを更新しました。 –

3

バックスラッシュはエスケープ文字です。新しい行を表示するために "\ n"が使われているのを見たことがあるかもしれません。そのためです。 "\ 123"は83のASCIIコードを "S"として解釈します。バックスラッシュを印刷するには、2つのバックスラッシュを使用します。したがって、str = "xyz\\123"を使用することができます。

+1

私はこれを試しました、それは動作しません。バックスラッシュを2回印刷します。出力: "xyz \\ 123" – boddhisattva

+1

@boddhisattva REPLは文字列の場合、元の文字列に "eval"することができる '.inspect'形式を出力するので、*正しい*オブジェクト。試してみてください: 'puts str'と比較してください。 –

+0

@pstありがとうございました。今ではRails ConsoleとIRBで "puts str"と同じように印刷されません。 – boddhisattva

0

バックスラッシュを印刷するにはどうすればよいですか?

2つのバックスラッシュを使用します。 "xyz\\123"

なぜ"xyz\123""xyzS"と評価されますか?

二重引用符で囲んだ文字列の\nnnは、の8進数のエスケープです。

Table 22.2. Substitutions in Double-Quoted Strings

トーマスD.ルビープログラミング(2009)、p.329

したがって、進123
=(64 * 1)+(8×2)+ 3
=小数点83
= ASCII S

+0

これはバックスラッシュの印刷とどのように関連していますか? –

0

それは簡単です...しようとダンプ機能:

mystring = %Q{"Double Quotes"} 
p mystring.dump 
=> "\"\\\"Double Quotes\\\"\"" 
p mystring 
=>"\"Double Quotes\"" 
関連する問題