2012-08-08 212 views
2

我正在嘗試使用正則表達式全局變量與ruby gsub!方法。在Ruby中使用正則表達式全局變量gsub

我心目中什麼是這樣的:

MyTextString.gsub!(/regex expression/,$1) 

這是怎麼了,我走近它,但它不工作。這是可能的,或者也許我的正則表達式不起作用。而不是

+1

您可以使用'gsub'塊格式的'$ 1'。 – 2012-08-08 02:24:40

回答

7

使用'\1'$1$1引用不存在,因爲你還沒有匹配的正則表達式又一個變量)

此外,「我的正則表達式是不工作」讓人難以幫助。一個更好的短語將解釋爲什麼它不工作(字符串相同,或者出現錯誤,或者其他),並提供重現問題所需的數據(字符串和正則表達式)。

str = "abcdefg" 
str.gsub!(/a(.)c/, '\1') 
str # => "bdefg" 
+0

謝謝。點我的問題,欣賞反饋。關於1美元,我認爲在整個gsub命令完成之前不會發生匹配。再次感謝。 – Mutuelinvestor 2012-08-08 02:25:16

+2

這並不是說「在整個命令完成之前不會發生比賽」。當方法被調用時,方法的參數在方法執行之前被計算*。因此,如果你執行'/regexp/.gsub("str「,$ 1)',* first * Ruby將評估'」str「'和'$ 1',*然後*它執行'gsub'。 '$ 1'是一個全局變量,在正則表達式匹配後由Ruby解釋器設置。所以如果你只是做了一個正則表達式匹配(在前面一行),將設置'$ 1',並且*(先前)匹配的*值將成爲'gsub'的第二個參數。 – 2012-08-08 05:46:15

+0

如果您發現字詞混淆,請編輯它。 – 2012-08-08 13:19:11

相關問題