2011-06-06 50 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)"