Причиной сбоя является то, что фигурные скобки являются зарезервированными символами в регулярном выражении, указывающем диапазон, поэтому вам нужно экранировать их (или, по крайней мере, открывающую).
Более того, \$
будет помещать буквальный знак $
в начале вашего регулярного выражения, но знак доллара указывает конец строки для сопоставления, так что вам также нужно "regexp-escape". Конечный результат будет быть:
const val PATTERN_TO_FIND = "\\\$\\{keyword}"
К счастью, Pattern
класс предлагает служебный метод для автоматического экранирования регулярного выражения:
val pattern = Pattern.quote("\${keyword}")
Обратите внимание, что вам все еще нужно избегать знака доллара, потому что он имеет особое значение в котлине.
Полный рабочий пример:
fun main() {
val s = "Today we are \${keyword} and it is beautiful"
val pattern = Pattern.quote("\${keyword}")
val keywordRegex = Regex(pattern)
println(s.replace(keywordRegex, "blabla"))
}
Напечатает:
Today we are blabla and it is beautiful