2016-07-13 6 views
2

にスラッシュエスケープすることは、この私は前方に脱出しようとしているルビー

"http://example.com/qb-xhtml-v1.xsd" => "http:\/\/example.com\/qb-xhtml-v1.xsd" 

のようなURLからスラッシュしかし、私はGSUBにしようとすると、これは私が

"http://example.com/qb-xhtml-v1.xsd".gsub("/", '\/') 
=> "http:\\/\\/example.com\\/qb-xhtml-v1.xsd" 

を得ているものですまた

"http://example.com/qb-xhtml-v1.xsd".gsub("/", '/' => '\/') 

てみました

同じ結果です。何か案は?

+0

なぜスラッシュをエスケープしようとしていますか? –

+2

** **はなぜですか?これは教科書[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)のように聞こえます。ここで実際に何をしようとしていますか? –

+3

それは価値があるので、あなたの最初の試み( '.gsub("/"、\/')')はすでにあなたが求めている問題を解決します。表示されている "二重バックスラッシュ"は、 "これはエスケープされる次の文字ではなく、リテラルのバックスラッシュ文字です"という表示方法です。 –

答えて

0

あなたが使用しているインタラクティブなルビーシェルは実際には存在しない余分なバックスラッシュを追加していると思います。

私はirbにあなたのコードを試してみましたが、同じ結果だ:

irb(main):005:0> "http://example.com/qb-xhtml-v1.xsd".gsub("/", '\/') 
"http:\\/\\/example.com\\/qb-xhtml-v1.xsd" 

をしかし、私はputs()を使用している場合、それは正しく印刷さ:

irb(main):006:0> puts "http://example.com/qb-xhtml-v1.xsd".gsub('/', '\/') 
http:\/\/example.com\/qb-xhtml-v1.xsd 
=> nil 

私はルビーシェルは単にバックスラッシュをエスケープしていることを疑います便宜上、混乱の原因となります。

+0

便利なのは、文字列リテラル形式で表現されたRuby文字列は特殊文字でエスケープする必要があり、バックスラッシュはその1つです。 – tadman

+0

@ tadman - 訂正していただきありがとうございます。 TIL。 –

関連する問題