例如:紅寶石,怪異的替代
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)"
。