例如:
str1 = "pppp(m)pppp"
str2 = "(m)"
str1 = str1.sub(/#{str2}/, "<>#{str2}<>")
我会得到这个:
"pppp(<>(m)<>)pppp"
我希望得到这个:
"pppp<>(m)<>pppp"
为什么会发生这种情况以及如何避免这种情况?
答案 0 :(得分:4)
(
和)
在regexen中具有特殊含义,并且实际上不匹配字符(
和)
。正则表达式/(m)/
将匹配任何m
,无论它是否括在括号中(如果是,它将与括号不匹配)。
要匹配文字括号使用\(
和\)
- 或者在这样的情况下,您要插入字符串,您只需在字符串上使用Regexp.escape
,即{{ 1}}。
答案 1 :(得分:1)
正则表达式将"(m)"
视为捕获组,因为括号是正则表达式中的运算符,以获取文本"(m)"
,您需要使用转义字符\
[{{ 1}}]。