В дальнейшем я ожидаю, что второй find () будет успешным, но это не так. Зачем?
Matcher matcher =
Pattern.compile("\\s*asdf").matcher("apple banana cookie");
// returns false as expected
matcher.find();
// resets groups (that weren't being explicitly being used anyway), but not state.
matcher.usePattern(Pattern.compile("\\s*banana"));
// returns false, expected true.
System.out.println(matcher.find());
Если квантификатор удаляется из первого регулярного выражения (становится просто «asdf»), второе совпадение завершается успешно. Глядя на объект Matcher, вы обнаруживаете, что некоторая групповая информация сохраняется после первого неудачного поиска (), хотя я бы этого не ожидал. Find () - это , предполагаемое , чтобы начинаться либо с начала (если нет предыдущего совпадения), либо с индекса последнего успешного совпадения. UsePattern () имеет значение предполагается , чтобы сохранить позицию Matcher во входных данных и отбросить информацию о группе (что, опять же, я не использовал явно).
Я что-то упустил, но я не знаю что. Я подозреваю, что мне нужно реализовать это с помощью LookingAt () и обновить регион (например, этот пример ), но я не знаю, почему этот подход не работает.