2016-03-03 90 views
1

文件escape.txt包含"/\\/"(斜槓,反斜槓,反斜槓,斜槓)。文件test_gsub.rb有:轉義字符紅寶石`gsub`

content = File.open(ARGV[0]).read 
content.gsub! content, content 
puts content 

此代碼將輸出"/\\/"(斜線,反斜線,斜線),即,oneback斜槓逃脫。

我想知道是否有一種方法來禁用此轉義功能。我想輸出(斜槓,反斜槓,反斜槓,斜槓)。

如果我刪除gsub,它會輸出(斜槓,反斜槓,反斜槓,斜槓)。

此功能非常重要,因爲我需要處理原始文本,並且gsub將始終轉義這些轉義字符。

+0

'File.open(ARGV [0])read'哈希 - >'File.read(ARGV [0])'或甚至可能是'ARGF.read'。 – cremno

回答

0
content.gsub! content, content => content 

docs for gsub你可以找到這個

如果更換將被替換爲匹配 文本字符串。它可能包含對\ d格式的捕獲組 的反引用,其中d是組編號或\ k,其中n是一個 組名。如果它是一個雙引號字符串,則兩個反引用必須在前面加上反斜槓 。但是,在替換 內,特殊匹配變量(例如$ &)將不會引用當前的 匹配項。

如果第二個參數是散列,並且匹配的文本是其中一個 鍵,則相應的值是替換字符串。

使用散列而不是字符串可防止\被專門處理。

雖然gsub!的文檔不提它似乎很好地工作(也許這是一個疏忽)

+0

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 - [來自評論](/ review/low-quality-posts/11485376) – CinCout

+0

@HappyCoder,這不是一個批評或澄清。它簡潔地展示瞭如何逃避內容以得到要求的結果。你對這個問題有不同的理解嗎? –

+0

答案被標記爲低質量!只解釋上面的代碼行是什麼會符合每個人的利益。 – CinCout