По умолчанию поиск выполняется жадно.Вы должны найти свой первый {
без жадности (.*?
), в то время как захват должен быть выполнен снова с жадностью (.*
):
".*?\{(.*)\}.*"
Полный код будет:
String s = // your input string
Pattern p = Pattern.compile(".*?\\{(.*)\\}.*");
Matcher m = p.matcher(s);
if (m.find()) {
System.out.println(m.group(1));
}
Вы можете сделать то же самое и без регулярных выражений, используя простые String
методы:
int start = s.indexOf("{") + 1;
int end = s.lastIndexOf("}");
if (start > -1 && end > start) {
System.out.println(s.substring(start, end));
}