Quando pegamos o jeito com expressões regulares e as usamos regularmente, é comum usar o .*
para qualquer situação, pois como todo curinga que se preze, é uma mão na roda. Mas à medida que você vai usando ERs para coisas mais complicadas e mais intensivamente, você começa a perceber que grande parte de seus problemas foi ter usado o curinga guloso e genérico, onde você poderia ter sido mais específico, e ele casou o que não devia.
Nem sempre é fácil trocar um curinga por outra coisa. Supõe-se que se você já o usou, é porque precisava de "qualquer coisa". Mas pare para pensar, esse qualquer coisa é realmente QUALQUER coisa? Lembre que isso é muito abrangente, o tudo e o nada. Não seria apenas "qualquer letra em qualquer quantidade" ou "quaisquer caracteres fora espaços em branco"?
Percebeu? As listas são nossa opção para tirar o curinga, trocando-o por algo não tão abrangente. Então, se em um texto normal, você procura parte de uma frase, o restante dela até o ponto final não diga que é .*\.
, mas [^.]*\.
, ou melhor: [A-Za-z ,]*\.
. Isso evita de o curinga casar além do ponto final da frase e ir até o ponto final do parágrafo.
Lembra a nossa demonstração da gulodice em que o asterisco casou demais? Podemos evitar isso sendo mais específicos em nossa ER. Em vez de dizer <.*>
, ou seja, uma marcação pode ter "qualquer coisa" antes do >
, dizemos que pode ter "qualquer coisa fora o fechamento da marcação". Invocaremos a lista negada para nos ajudar nessa supertarefa, assim: <[^>]*>
, ou mais visual:
um <b>negrito</b> aqui. ...xxxxxxxxxxxxxx <.*> ...xxx.......xxxx <[^>]*>