I have a string like
String string = "number0 foobar number1 foofoo number2 bar bar bar bar number3 foobar";
I need a regex to give me the following output:
number0 foobar
number1 foofoo
number2 bar bar bar bar
number3 foobar
I have tried
Pattern pattern = Pattern.compile("number\\d+(.*)(number\\d+)?");
Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
    System.out.println(matcher.group());
}
but this gives
number0 foobar number1 foofoo number2 bar bar bar bar number3 foobar
                So you want number (+ an integer) followed by anything until the next number (or end of string), right?
Then you need to tell that to the regex engine:
Pattern pattern = Pattern.compile("number\\d+(?:(?!number).)*");
In your regex, the .* matched as much as it could - everything until the end of the string. Also, you made the second part (number\\d+)? part of the match itself.
Explanation of my solution:
number    # Match "number"
\d+       # Match one of more digits
(?:       # Match...
 (?!      #  (as long as we're not right at the start of the text
  number  #   "number"
 )        #  )
 .        # any character
)*        # Repeat as needed.
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With