2016-07-13 80 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("/", '/' => '\/') 

"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

我相信你使用的交互式ruby shell會增加額外的反斜槓,這些反斜槓實際上並不存在。

我試着在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字符串需要在特殊字符上轉義,並且反斜槓就是其中之一。 – tadman

+0

@tadman - 感謝您的糾正。 TIL。 –