2011-06-06 62 views
2

例如:紅寶石,怪異的替代

str1 = "pppp(m)pppp" 
str2 = "(m)" 
str1 = str1.sub(/#{str2}/, "<>#{str2}<>") 

我會得到這個:

"pppp(<>(m)<>)pppp" 

我希望得到這樣的:

"pppp<>(m)<>pppp" 

它的原因以及如何避免這種情況?

回答

4

()在使用regexen特殊含義,實際上不匹配字符()。正則表達式/(m)/將匹配任何m,不管它是否包含在圓括號中(如果是,則不會與括號匹配)。

要匹配字面括號使用\(\) - 或在這樣的情況下你插一個字符串,你可以使用Regexp.escape弦上,即/#{ Regexp.escape(str2) }/

1

的正則表達式的捕獲組查看"(m)"因爲括號在正則表達式運營商獲得你需要使用轉義字符\ ["\(m\)"]文字"(m)"