Quantificadores regex

Olá pessoal,

Estou com dúvidas com relação a esse código:

public class Tokenizacao2 { static public void main(String java[]){ try{ Scanner s = new Scanner("xabxab0zzab112333333333"); String token; do{ token = s.findInLine("ab[0-9]?+"); System.out.print(" " + token); }while(token != null); }catch(Exception ex){ ex.printStackTrace(); } } }

A saída do código acima é:
ab ab0 ab1 null

porém se eu alterar a expressão regular de “ab[0-9]?+” para “ab[0-9]+?” a saída muda para:
ab0 ab1 null

Se mudar para “ab[0-9]?” a saída fica:
ab ab0 ab1 null

Se mudar para “ab[0-9]+” a saída fica:
ab0 ab112333333333 null

Quando é usado apenas um quantificador, ? ou +, eu entendo o funcionamento. Porém quando são usados 2 quantificadores(como no livro que estou lendo) dai não entendo as saídas. Alguém poderia me explicar por favor como funciona esse negócio de usar ?+ ou +?.

Obrigado.

Até onde eu sei, é errado colocar dois quantificadores seguidos numa regex. Não dá erro, mas o match é imprevisível.