Я пытался ответить на вопрос недавно и, пытаясь его решить, столкнулся с вопросом.Как фиксировать все вложенные совпадения?
Учитывая следующий код
private void regexample(){
String x = "a3ab4b5";
Pattern p = Pattern.compile("(\\D+(\\d+)\\D+){2}");
Matcher m = p.matcher(x);
while(m.find()){
for(int i=0;i<=m.groupCount();i++){
System.out.println("Group " + i + " = " + m.group(i));
}
}
}
И выход
Group 0 = a3ab4b Group 1 = b4b Group 2 = 4
Есть ли прямой способ я пропускаю, чтобы получить значение 3
? Шаблон должен искать два входа (\\D+(\\d+)\\D+)
back-to-back, а a3a
является частью матча. Я понимаю, что могу изменить выражение на (\\D+(\\d+)\\D+)
, а затем искать все совпадения, но это технически не то же самое. Это единственный способ сделать двойной поиск? т. е. Использовать заданный шаблон для соответствия строке, а затем снова искать для каждого подсчета внешней группы?
Я догадался, что первые значения были перезаписаны вторым, но поскольку я не так хорош с регулярным выражением, я надеялся, что что-то мне не хватает.
Когда вы повторяете группу захвата, первый захват перезаписывается последним. –