Привет У меня есть строка "id:2 CAT-id:9-101"
. Я хочу извлечь из этой строки значения id, 2 и 9. Я прочитал http://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#group(int)за пределами исключения для java Matcher
и попробовал этот код, но он бросает исключение при попытке извлечь 9:
Pattern p = Pattern.compile("id:([0-9]+)");
Matcher m = p.matcher("id:2 CAT-id:9-101");
ArrayList<Integer> ids = new ArrayList<Integer>();
int index = 1;
while(m.find()) {
String match = m.group(index);
int id = Integer.parseInt(match);
ids.add(id);
index++;
}
Я также запутаться при чтении http://docs.oracle.com/javase/tutorial/essential/regex/groups.html; я должен использовать здесь обратные ссылки, чтобы получить идентификаторы? Я пробовал это позже, а m.find() всегда возвращал false, когда я менял регулярное выражение на "id:([0-9]+)\\$1"
обратные ссылки подобны этому (если они были синтаксически правильными, что я думаю, что это не так, поскольку у вас есть обратная косая черта и знак доллара, я думаю, вы просто хотите (экранированный) обратная косая черта) заставит его соответствовать только дублированным номерам, например «id: 123123», но даже это не сработает, если вы не сделали первую группу не- жадный (например, "id: ([0-9] +?) \\ 1") –