2015-06-14 57 views
2

我試圖用\\替換所有出現的\。這是我的第一次嘗試:用`\`替換ruby中的``

> puts '\\'.gsub('\\', '\\\\') 
\ 

當我看到輸出時,我非常驚訝。經過一番試驗,我終於能夠做到我想要的這個代碼:

> puts '\\'.gsub('\\', '\\\\\\') 
\\ 

爲什麼不是第一塊代碼工作?爲什麼我需要六個反斜槓?

回答

3
'\\'.gsub('\\', '\\\\') 

當取代發生時,替換字符串'\\\\'由正則表達式發動機通過,並\\\取代。替換字符串結尾爲'\\',單個反斜槓。


的idomatic方式來取代任何單一bachslach翻一番是使用:

str.gsub(/\\/, '\\\\\\\\\') # 8 backslashes! 
+0

哦,所以在這裏我必須逃脫兩次 - 首先是Ruby,然後是它的正則表達式引擎?會'更正確嗎? – xx77aBs

+1

@ xx77aBs沒錯,我編輯了答案。 –

1

短一點

'\\'.gsub(/(\\)/, '\1\1') 
2

您也可以使用Regexp.escape逃避你\

puts '\\'.gsub('\\', Regexp.escape('\\\\'))