Greedy | Reluctant | Possessive | Significado |
x? | x?? | x?+ | acha x, se aparece uma vez ou nenhuma |
x* | x*? | x*+ | acha x, se aparece zero ou mais vezes |
x+ | x+? | x++ | acha x, se uma ou mais vezes |
x{n} | x{n}? | x{n}+ | acha x, se exatamente n vezes |
x{n,} | x{n,}? | x{n,}+ | acha x, se pelo menos n vezes |
x{n,m} | x{n,m}? | x{n,m}+ | acha x, se pelo menos n vezes, mas não mais que m vezes |
Fácil? Também acho complicado.
Primeiro fato o tipo do qualificador é dado pelo sufixo. Vamos voltar na tabela acima. Todos os qualificadores greedy não tem um sufixo especial, os qualificadores reluctant tem uma interrogação no final e os possessive tem um sinal de mais no final.
Vamos testar uma pesquisa do caracter a, com algumas variações para ver se conseguimos entender:
No caso da string pesquisada estar vazia, vemos que a? e a* retornam resultados. Por quê? Se lemos a definição, estas duas opções retornam quando existem zero ocorrências do caracter procurado - daí o resultado de ter encontrado na posição zero. Como a string é nula, a+ não encontra, afinal não tem nada para ser encontrado e é necessária pelo menos uma ocorrência.
Quando colocamos um único a na string pesquisada, os resultados são diferentes. Vemos que a? e a* retornam os mesmos resultados. Apesar disto os motivos são diferentes, a? retorna dois resultados, porque só existem 2 resultados possíveis: o caracter só aparece uma vez (afinal a string só tem uma letra a) e o resultado para nenhum vez. Desta vez a+ já retorna um resultado, pois a letra aparece uma (única) vez.
Quanto a string pesquisada é aaa, os resultados são ainda mais inusitados. a? divide a string em 4 blocos, são as três ocorrências da letra procurada e o final. a* acha 2 blocos, um composto pelo conjunto das letras repetidas e um vazio. a+ acha somente o bloco com as letras repetidas.
Vejam o resultado a seguir. Ficou mais fácil de entender?
Continua na 6ª parte deste post.
Nenhum comentário:
Postar um comentário