Почему в коде ниже, число 12 не заменяется? Неправильно составлено регулярное выражение или дело в чем-то еще?

  public static void main(String[] args) {
        StringBuilder str = new StringBuilder("это 1 бакс, а это - 12.");
        Pattern pattern = Pattern.compile("\\b1[0-2]\\b|\\b[0-9]\\b");
        Matcher matcher = pattern.matcher(str);
        while(matcher.find()){
            str.replace(matcher.start(), matcher.end(), "rere");
            System.out.println(str);
        }
    }

Ответы (2 шт):

Автор решения: Artem Berezovski

Вы ищите вхождения в строке и в тоже время изменяете исходную строку - она увеличивается в размере, но размер, захваченный Matcher'ом остаётся тот, который был у первоначальной строки => метод find() находит всё корректно, но из-за ограничения по размеру не может захватить "2".

→ Ссылка
Автор решения: AlekseiGaile
public static void main(String[] args) throws IOException {
        StringBuilder str = new StringBuilder("это 1 бакс, а это - 12.");
        Pattern pattern = Pattern.compile("\\b1[0-2]\\b|\\b[0-9]\\b");
        Matcher matcher = pattern.matcher(str);

        String result = matcher.replaceAll("rere");
        System.out.println(result);
    }
→ Ссылка