Выход +
является правильным, так как \+
соответствует литералу +
.В шаблонах регулярных выражений необходимо экранировать больше символов, см. Какие специальные символы необходимо экранировать в регулярных выражениях?
В Scala вы можете использовать """...."""
строковый литерал с тройными кавычкамииспользовать только 1 обратную косую черту.См. Справка по регулярным выражениям Scala :
Поскольку экранирование не обрабатывается в многострочных строковых литералах, использование тройных кавычек позволяет избежать экранирования символа обратной косой черты, поэтому "\\d"
можетбыть написано """\d"""
.Тот же результат достигается с определенными интерполяторами, такими как raw"\d".r
или пользовательский интерполятор r"\d"
, который также компилирует Regex
.
Итак, используйте
val mystring = "test+string"
val tomatch = """test\+string"""
mystring.matches(tomatch)
См. Scala demo
Иначе, в обычном (не "необработанном") строковом литерале вам понадобятся двойные обратные слеши:
val tomatch = "test\\+string"
Еслишаблон целой строки должен рассматриваться как буквенная строка , использовать
import scala.util.matching.Regex
, а затем
val tomatch = Regex.quote("test+string")
Regex.quote
будет экранировать все специальные символы, которые должны быть корректно экранированы.
Еще одна демонстрация Scala