Как сопоставить строку, содержащую символ плюс (+) в Scala? - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь сопоставить две строки, в которых есть символ «+».

val mystring = "test+string"
val tomatch = "test+string"

mystring.matches(tomatch)
This returns False.

пытался экранировать + с помощью \ +, однако это не работает.

1 Ответ

0 голосов
/ 08 июня 2018

Выход + является правильным, так как \+ соответствует литералу +.В шаблонах регулярных выражений необходимо экранировать больше символов, см. Какие специальные символы необходимо экранировать в регулярных выражениях?

В 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...