例如:红宝石,怪异的替代
str1 = "pppp(m)pppp"
str2 = "(m)"
str1 = str1.sub(/#{str2}/, "<>#{str2}<>")
我会得到这个:
"pppp(<>(m)<>)pppp"
我希望得到这样的:
"pppp<>(m)<>pppp"
它的原因以及如何避免这种情况?
例如:红宝石,怪异的替代
str1 = "pppp(m)pppp"
str2 = "(m)"
str1 = str1.sub(/#{str2}/, "<>#{str2}<>")
我会得到这个:
"pppp(<>(m)<>)pppp"
我希望得到这样的:
"pppp<>(m)<>pppp"
它的原因以及如何避免这种情况?
在(
和)
在使用regexen特殊含义,实际上不匹配字符(
和)
。正则表达式/(m)/
将匹配任何m
,不管它是否包含在圆括号中(如果是,则不会与括号匹配)。
要匹配字面括号使用\(
和\)
- 或在这样的情况下你插一个字符串,你可以使用Regexp.escape
弦上,即/#{ Regexp.escape(str2) }/
。
的正则表达式的捕获组查看"(m)"
因为括号在正则表达式运营商获得你需要使用转义字符\
["\(m\)"
]文字"(m)"
。