Ruby,奇怪的替代

时间:2011-06-06 23:29:31

标签: ruby regex

例如:

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

我会得到这个:

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

我希望得到这个:

"pppp<>(m)<>pppp"

为什么会发生这种情况以及如何避免这种情况?

2 个答案:

答案 0 :(得分:4)

()在regexen中具有特殊含义,并且实际上不匹配字符()。正则表达式/(m)/将匹配任何m,无论它是否括在括号中(如果是,它将与括号不匹配)。

要匹配文字括号使用\(\) - 或者在这样的情况下,您要插入字符串,您只需在字符串上使用Regexp.escape,即{{ 1}}。

答案 1 :(得分:1)

正则表达式将"(m)"视为捕获组,因为括号是正则表达式中的运算符,以获取文本"(m)",您需要使用转义字符\ [{{ 1}}]。