我想用反斜槓單引號(\'
)替換所有出現的單引號('
)。我試着用gsub
這樣做,但我得到部分字符串重複:Gsub導致部分字符串被替換
a = "abc 'def' ghi"
a.gsub("'", "\\'")
# => "abc def' ghidef ghi ghi"
有人可以解釋爲什麼發生這種情況,什麼解決這是什麼?
我想用反斜槓單引號(\'
)替換所有出現的單引號('
)。我試着用gsub
這樣做,但我得到部分字符串重複:Gsub導致部分字符串被替換
a = "abc 'def' ghi"
a.gsub("'", "\\'")
# => "abc def' ghidef ghi ghi"
有人可以解釋爲什麼發生這種情況,什麼解決這是什麼?
發生這種情況是因爲"\\'"
作爲gsub
的替代參數出現時具有特殊含義,即它表示匹配後的子字符串。
做你想做什麼,你可以使用塊:
注意反斜槓在字符串逃過檢查,所以它顯示爲\\
。
您不需要使用塊表單;你只需要在另一個''''''前面加上另一個'''''',在雙引號中看起來像''\\\\'「':'a.gsub(」'「,」\\\\ '「)' –
這是可能的,你只需要更高劑量逃逸的:
a.gsub(/'/, "\\\\'")
結果:
ABC \ '高清\' GHI
這與a.gsub(」'「,」\\\'「) – Bunti
相同,謝謝,它對我很有用。 –
你"\\'"
實際上代表文字\'
,因爲反斜槓轉義下一個反斜槓。而Ruby正則表達式中的文字\'
實際上是一個特殊變量,它插入到匹配部分後面的字符串部分。所以這裏發生了什麼。
abc 'def' ghi
^
插入點指向第一個匹配,'
。將其替換爲右邊的所有東西,即def' ghi
。
abc def' ghidef' ghi
++++++++
現在找到下一場比賽:
abc def' ghidef' ghi
^
再次,什麼東西都在它的右邊更換'
,即ghi
。
abc def' ghidef ghi ghi
++++
謝謝您的詳細解釋! –
https://stackoverflow.com/questions/1542214/weird-backslash-substitution-in-ruby應該回答你的問題 – bjhaid
感謝您的快速回復bjhaid!這回答了我的問題。你應該發佈它作爲答案。然後我可以提高你的評價。 –