Assim como artistas famosos e personalidades que conseguem arrastar multidões, o grupo tem o dom de juntar vários tipos de sujeitos em um mesmo local. Dentro de um grupo podemos ter um ou mais caracteres, metacaracteres e inclusive outros grupos! Como em uma expressão matemática, os parênteses definem um grupo, e seu conteúdo pode ser visto como um bloco na expressão.
Todos os metacaracteres quantificadores que vimos anteriormente, podem ter seu poder ampliado pelo grupo, pois ele lhes dá mais abrangência. E o ou, pelo contrário, tem sua abrangência limitada pelo grupo, e pode parecer estranho, mas é essa limitação que lhe dá mais poder.
Em um exemplo simples, (ai)+
agrupa a palavra "ai" e esse grupo está quantificado pelo mais. Isso quer dizer que casamos várias repetições da palavra, como ai, aiai, aiaiai, ... E assim podemos agrupar tudo o que quisermos, literais e metacaracteres, e quantificá-los:
(ha!)+ ha!, ha!ha!, ha!ha!ha!, ... (\.[0-9]){3} .0.6.2, .2.8.9, .6.6.6, ... (www\.)?zz\.com www.zz.com, zz.com
E em especial nosso amigo ou ganha limites e seu poder cresce:
boa-(tarde|noite) boa-tarde, boa-noite (#|n\.|núm) 6 # 6, n. 6, núm 6 (in|con)?certo incerto, concerto, certo
Note que o grupo não altera o sentido da ER, apenas serve como marcador. Podemos criar subgrupos também, então imagine que você esteja procurando o nome de um supermercado em uma listagem e não sabe se este é um mercado, supermercado ou um hipermercado.
(super|hiper)mercado
Consegue casar as duas últimas possibilidades, mas note que nas alternativas super e hiper temos um trecho per comum aos dois, então podíamos "alternativizar" apenas as diferenças su e hi:
(su|hi)permercado
Precisamos também casar apenas o mercado sem os aumentativos, então temos de agrupá-los e torná-los opcionais:
((su|hi)per)?mercado
Pronto! Temos a ER que buscávamos e ainda esbanjamos habilidade utilizando um grupo dentro do outro.
Ei! E se tivesse minimercado também?
(mini|(su|hi)per)?mercado
E assim vai... Acho que já deu para notar quão poderosas e complexas podem ficar nossas ERs ao utilizarmos grupos, não? Mas não acaba por aqui! Acompanhe o retrovisor na seqüência.
Espera! E se eu quiser casar um par de parênteses literais?
Ah! Lembra-se do escape criptonita? Basta tirar o poder dos parênteses, escapando-os. Veja um exemplo na ER para procurar declarações de função em códigos de programas como Minha_Funcao()
[A-Za-z0-9_]+\(\)
Ou ainda, caso acentuação seja permitida em nomes de função (lembre-se das classes POSIX!):
[[:alnum:]_]+\(\)
Resumão