Я использую while(matcher.find())
, чтобы просмотреть все совпадения паттерна. Для каждого экземпляра или совпадения найденного шаблона я хочу заменить matcher.group(3)
новым текстом. Этот текст будет отличаться для каждого из них, поэтому я использую matcher.appendReplacement()
для перестройки исходной строки с новыми изменениями по мере прохождения. Однако appendReplacement()
заменяет весь шаблон вместо только группы.
Как я могу это сделать, но изменить только третью группу матча, а не весь шаблон?
Вот пример кода:
Pattern pattern = Pattern.compile("THE (REGEX) (EXPRESSION) (WITH MULTIPLE) GROUPS");
Matcher matcher = pattern.matcher("THE TEXT TO SEARCH AND MODIFY");
StringBuffer buffer = new StringBuffer();
while(matcher.find()){
matcher.appendReplacement(buffer, processTheGroup(matcher.group(3));
}
но я бы хотел сделать что-то подобное (очевидно, это не работает).
...
while(matcher.find()){
matcher.group(3).appendReplacement(buffer, processTheGroup(matcher.group(3));
}
Нечто подобное, когда оно заменяет только определенную группу, а не весь Образец.
РЕДАКТИРОВАТЬ: изменил пример регулярного выражения, чтобы показать, что не все шаблоны сгруппированы.