2014-03-13 43 views
1

這些\\n顯示在我的字符串中,即使它應該只是\n你爲什麼不能在Ruby中使用gsub這個字符串?

但是,如果我這樣做:

"\n".gsub('\\n','\b') 

它返回:

"\n" 

理想情況下,我試圖尋找能夠改寫這個字符串的正則表達式:

"R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\\nZjTX\\n" 

不顯示兩個反斜槓,但只是這樣一個:

"R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\nZjTX\n" 

但我所做的任何正則表達式都不起作用。我可以用gsub取出\n並在那裏放入類似X的東西,但是如果我把\放入其中,那麼Ruby會用另外的\轉義它,從而破壞我的加密模塊,因爲它需要是特定的。

任何想法?

+0

我有點困惑你的實際目標是什麼,但儘量'」 \ n''而不是'「\ n」' –

+0

用字符串'\ n'或*字符*換行符替換'\\ n'? – Linuxios

+0

下面是一個關於gsub中黑色棋子的相關主題:http://stackoverflow.com/questions/1542214/weird-backslash-substitution-in-ruby – blueygh2

回答

3

在雙引號和單引號的字符串中使用時,您正陷入逃脫的不同含義的陷阱。雙引號字符串允許使用轉義字符。因此,這裏"\n"實際上是一個包含單個換行符的單字符字符串。將其與'\n'相比較,後者是一個包含文字反斜槓後跟字符n的雙字符字符串。

這解釋了,乳清你的gsub不匹配。如果您使用下面的代碼,它應該工作:

"\\n".gsub('\n','\b') 

對於你的實際問題,你可以使用這個

string = "R3pQvDqmz/EQ7zho2mhIeE6UB4dLa6GUH7173VEMdGCcdsRm5pernkqCgbnj\\nZjTX\\n" 
new_string = string.gsub("\\n", "\n") 
+0

+1爲了進一步闡明第一種情況:'「\ n」.gsub(「 \ n「,'\ b')'產生'」\\ b「​​'。 – Matt

+0

Trip第一個例子實際上想要達到什麼目的有點不清楚。我使用的代碼與他的數據相匹配,所以我選擇了這個。你的例子也適用。關鍵是,他試圖匹配不同的東西,因此沒有得到他預期的結果。 –

+0

完全同意。評論已更新。 – Matt

相關問題