У меня есть следующий фрагмент кода Java:
Pattern pattern = Pattern.compile("\\$\\{.+\\}");
String str = "str1/${com.test.p1}/str2/${com.test.p2}str3";
int start = 0;
Matcher m = pattern.matcher(str);
while (m.find(start)) {
System.out.println(m.start());
System.out.println(m.end());
start = m.end();
}
Я пытаюсь извлечь строки в скобках (com.test.p1 & com.test.p2). Однако при выполнении кода вывод будет следующим:
5
47
, что означает, что шаблон соответствует всей последовательности:
${com.test.p1}/str2/${com.test.p2}
Скорее всего, это происходит потому, что регулярное выражение несколько жадное и потребляет все входные данные, пока не достигнет последней закрывающей скобки. Как я могу переписать шаблон так, чтобы он соответствовал всем этим регионам, при условии, что нет фиксированного числа?