17
A
回答
16
請注意,這個答案是安息在紅寶石1.9的競爭。由於ruby 2.0有一個新的正則表達式引擎,它可能無法在這種情況下有效。
這工作:
str.gsub!("\\", "\\\\\\")
str.gsub!("\\", "\\\\\\\\") # also, will always work
編輯:解釋(通過http://www.ruby-forum.com/topic/143645由@vache提供)
免責聲明:我不熟悉Ruby的正則表達式引擎的內部運作,這裏的任何信息從上述文章中扣除。
要知道的基本知識是替換字符串得到2次評估。
第一次斜槓在字符串中作爲轉義工作時,第二次gsub將搜索字符串中的組引用。
正如@ chris-johnsen所提到的那樣,6個斜線不會一直工作。這讓我相信像這樣的事情正在發生:
6斜線。 3個斜槓傳遞給組參考層。尾部斜線不被解釋爲轉義字符,因爲它後面沒有任何字符,它被解釋爲反斜槓。所以最後這個圖層返回2個斜線。如果有什麼會跟蹤它,表達式將失敗,因爲第三個斜槓現在將作爲轉義字符。
對於8個斜線:將4個斜槓傳遞給組參考圖層。四個斜槓反過來將減少到兩個。
相關問題
- 1. 如何用斜槓'/'替換反斜槓'\'?
- 2. 如何用單個反斜槓替換雙反斜槓
- 3. 用雙反斜槓「\\」替換單個反斜槓「\\」
- 4. 用JavaScript中的雙反斜槓替換單個反斜槓
- 5. Ruby用單反斜槓替換雙反斜槓
- 6. 用Emacs中的單個反斜槓替換雙反斜槓
- 7. sed用反斜槓替換正斜槓
- 8. 將反斜槓逗號替換爲雙反斜槓逗號
- 9. 替換反斜槓
- 10. 正斜槓替換爲反斜槓
- 11. 蟒蛇代替反斜槓反斜槓
- 12. 正則表達式:用雙反斜線替換反斜槓,但與四反斜槓不是雙反斜線
- 13. 在php中使用雙反斜槓代替單反斜槓
- 14. 用單個反斜槓代替雙反斜槓
- 15. 如何用JavaScript中的雙反斜槓替換反斜槓字符?
- 16. 用sed與正斜槓替換所有反斜槓(雙打太)
- 17. 用sed替換反斜槓
- 18. 用兩個反斜槓替換反斜槓的Apache Velocity
- 19. python用雙反斜槓替換單反斜線
- 20. 如何使用javascript替換正斜槓爲反斜槓和正斜槓
- 21. 如何使用java將反斜槓替換爲正斜槓?
- 22. 如何用反斜槓替換正斜槓
- 23. 用字符串中的單個反斜槓替換雙反斜槓
- 24. Perl正則表達式:用雙反斜槓替換所有反斜槓
- 25. 用單個反斜槓替換字符串文字中的雙反斜槓
- 26. 替換反斜槓前綴
- 27. 替換反斜槓C
- 28. 在URL直接替換反斜槓反斜槓
- 29. String.replaceAll單反斜線與雙反斜槓
- 30. 用LPSTR文件路徑中的雙反斜槓或正斜槓替換反斜槓
有一個討論[這裏](http://www.ruby-forum.com/topic/143645)關於爲什麼它是這樣的。 – Vache 2011-06-02 01:39:58
我試着用8(!)反斜槓,我認爲它的工作... – 2011-06-02 01:40:18
如果你添加解釋(Vache的鏈接是有幫助的),我會接受你的答案。我不喜歡接受解答而不解釋爲什麼解決方案。你也可以解釋爲什麼它可以同時使用6個和8個反斜槓,因爲我不太明白我自己...... – 2011-06-02 02:05:47