2011-12-28 73 views
1

我很困惑,結果如下,紅寶石反向引用不正常

我有一個這樣的字符串: -

string = "hai\"hello\!tst\`\~end" 

當我使用反斜線和反向引用之間的空間(\ 1)它按預期正常工作。

puts string.gsub(/([\"\!\`\~])/,'\\ \1') 
=> hai\ "hello\ !tst\ `\ ~end 

但同樣的事情沒有空間沒有工作!該字符串被反向引用號碼替換。

puts string.gsub(/([\"\!\`\~])/,'\\\1') 
=> hai\1hello\1tst\1\1end 

但我期待像

=> hai\"hello\!tst\`\~end 

的回答讓我知道如果你需要更多的信息。提前致謝。

+1

當使用字符類時,您不必逃避您的角色:只需編寫[「!'〜]。 – fge 2011-12-28 11:32:36

+0

@fge ok,謝謝 – Thangaraj 2011-12-28 11:33:49

回答

3

你需要的是更多的反斜槓:上的gsub的secont參數進行

string = "hai\"hello\!tst\`\~end" 

puts string.gsub(/([\"\!\`\~])/,'\\\\\1') 
# >> hai\"hello\!tst\`\~end 

兩步處理,使\\\1成爲\\1變成文字\1。有五個反斜槓,其中前四個減爲一個,並且\1轉義序列完好無損,可以替換。

+0

您能否再詳述一下爲什麼我們需要更多的反斜槓?工作中 :) – Thangaraj 2011-12-28 11:45:14