Ao construir uma ER, lembre-se que um dia alguém, provavelmente você mesmo, terá de dar manutenção a ela, para arrumar algum problema ou incrementá-la. Tendo isso em mente, evite fazer construções complicadas desnecessariamente. Nem sempre a menor ER é a melhor, tudo vai depender do quão comentada ela está ou das habilidades de quem for mantê-la. Vamos ver um exemplo bem simples. Lembra na explicação do escape, quando vimos uma ER que casava um número de RG?
[0-9]\.[0-9]{3}\.[0-9]{3}-[0-9]
Note que o trecho para casar um ponto e três números seguidos \.[0-9]{3}
se repete duas vezes, então podemos agrupá-lo e aplicar as chaves, diminuindo o tamanho da ER:
[0-9](\.[0-9]{3}){2}-[0-9]
Note, porém, que nesse caso, essa "simplificação" da expressão acabou ficando não tão simples assim, e exige um pouco de reflexão até você pescar exatamente o que ela faz. Foi vantagem ter diminuído seu tamanho? Isso é questionável, mas geralmente não. E aquela do mercado?
(mini|(su|hi)per)?mercado
Será que se a deixássemos mais simples, não ficaria mais fácil entendê-la? A mudança é pequena, mas veja como visualmente fica mais agradável e fácil:
(mini|super|hiper)?mercado
Nem sempre a ER menor é a melhor.
Então muito cuidado ao colocar grupos dentro de grupos, quantificar grupos, usar chaves quando se pode usar o asterisco, entre outros. Procure manter sua ER simples. Como dizem os gringos: KISS ("Keep It Simple, Stupid"), traduzindo: "deixe simples, estúpido".