Вы можете захватить эту часть, используя:
val pattern = """\{outer\.([^{}]*)\}""".r.unanchored
val s = "try {outer.test}"
val result = s match {
case pattern(i) => i
case _ => ""
}
println(result)
Шаблон соответствует
\{outer\.
- буквальная {outer.
подстрока ([^{}]*)
- Группа захвата 1: ноль или более (*
) символов, отличных от {
и }
(см. [^{}]
отрицательный класс символов) \}
- a }
char.
ПРИМЕЧАНИЕ: если ваше регулярное выражение должно соответствовать всей строке, удалите добавленное мной .unanchored
, чтобы также разрешить частичное совпадение внутри строки.
См. Scala demo online .
Или вы можете изменить шаблон так, чтобы первая часть больше не была потребляющим шаблоном (она соответствует строке фиксированной длины, поэтому это возможно):
val pattern = """(?<=\{outer\.)[^{}]*""".r
val s = "try {outer.test}"
println(pattern.findFirstIn(s).getOrElse(""))
// => test
См. это демо Scala .
Здесь (?<=\{outer\.)
, положительный взгляд сзади, соответствует {outer.
, но не помещает его в значение совпадения.