2011-06-02 167 views

回答

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個斜槓傳遞給組參考圖層。四個斜槓反過來將減少到兩個。

+4

有一個討論[這裏](http://www.ruby-forum.com/topic/143645)關於爲什麼它是這樣的。 – Vache 2011-06-02 01:39:58

+0

我試着用8(!)反斜槓,我認爲它的工作... – 2011-06-02 01:40:18

+1

如果你添加解釋(Vache的鏈接是有幫助的),我會接受你的答案。我不喜歡接受解答而不解釋爲什麼解決方案。你也可以解釋爲什麼它可以同時使用6個和8個反斜槓,因爲我不太明白我自己...... – 2011-06-02 02:05:47

相關問題