例如:

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

我会得到这个:
"pppp(<>(m)<>)pppp"

我想得到这个:
"pppp<>(m)<>pppp"

为什么会这样?如何避免?

最佳答案

in()在regexen中有一个特殊的含义,实际上与字符()不匹配。regex/(m)/将与任何m匹配,无论它是否括在括号中(如果是,则与括号不匹配)。
要匹配文字括号,请使用\(\)-或者在这样的情况下插入字符串,只需对字符串使用Regexp.escape,即/#{ Regexp.escape(str2) }/

关于ruby - Ruby,奇怪的替代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6259173/

10-12 22:26