anterior | início | próxima

Grupo: o pop (...)

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

Está gostando da leitura?
Está aprendendo?
Compre o livro novo que traz mais conteúdo, texto atualizado e ilustrações!
anterior | início | próxima