Entenda a diferença de *, +, {n,m} e do que acontece ao acrescentar ?.
Os quantificadores indicam quantas vezes o elemento anterior se repete. O * é 0 ou mais vezes, o + é 1 ou mais vezes, e o ? é 0 ou 1 vez. A quantidade exata é escrita com {n} e o intervalo com {n,m}. Por exemplo, \d{3} são exatamente três dígitos.
Por padrão, os quantificadores são gulosos (greedy), ou seja, tentam consumir o máximo possível. Aplicar <.*> a <a>b<c> captura tudo, do primeiro < até o último >.
Acrescentar ? depois do quantificador o torna uma correspondência preguiçosa (lazy). <.*?> consome o mínimo possível e captura apenas <a>. Essa diferença é decisiva ao extrair, um a um, os conteúdos entre tags ou aspas.
É comum que o padrão se comporte de forma diferente do esperado por causa da ganância ou da preguiça. Se o resultado for capturado de forma ampla demais, pense em um quantificador preguiçoso ou em uma classe de caracteres negada (como [^>]).