Here is a regex that can handle multiple spaces, can tell you where the full match was found, where the words itself was found, and doesn't require resetting the Matcher to continue the search.
String input = "abc abc abc xyz xyz xyz";
Pattern p = Pattern.compile("abc(?=(\\s+([a-z]+)\\s+xyz))");
for (Matcher m = p.matcher(input); m.find(); ) {
String match = m.group() + m.group(1);
String word = m.group(2);
System.out.printf("%d-%d: %s%n", m.start(), m.end(1), match);
System.out.printf(" %d-%d: %s%n", m.start(2), m.end(2), word);
}
Output
5-18: abc abc xyz
10-13: abc
10-23: abc xyz xyz
15-18: xyz
It works by only matching the leading abc directly, then matching the rest in a zero-width positive lookahead, capturing the entire look-ahead match, so the "full" match can be built. This allows the second search result start matching with the word previously matched.
For extra bonus points, it also captured just the word itself.
You can then choose whether you want the full match, or just the word.