2016-07-13 81 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。 –