Я использую 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));
}
Что-то вроде этого, где он заменяет только определенную группу, а не весь шаблон.
EDIT: изменил пример регулярного выражения, чтобы показать, что не весь шаблон сгруппирован.