*
significa que o padrão imediatamente anterior é repetido, não que o texto correspondente seja repetido. Por exemplo, [ab]*
significa (|[ab]|[ab][ab]|[ab][ab][ab]|…)
O padrão [ab]
é repetido zero ou mais vezes. Ele corresponderá a "aba"
porque isso preenche corretamente o padrão [ab][ab][ab]
.
Com .*
, torna-se (|.|..|...|....|…)
, portanto, corresponde a qualquer número de caracteres e os caracteres podem diferir.