anterior | início | próxima

Asterisco: o tanto-faz

Se o opcional já não esquenta a cabeça, podendo ter ou não a entidade anterior, o asterisco é mais tranqüilo ainda, pois para ele pode ter, não ter, ou ter vários, infinitos. Em outras palavras, a entidade anterior pode aparecer em qualquer quantidade.

6*0             0, 60, 660, 6660, ..., 666666666660, ...
bi*p            bp, bip, biip, biiip, biiiip...
b[ip]*          b, bi, bip, biipp, bpipipi, biiiiip, bppp, ...

Como HTML é sempre um ótimo exemplo, voltamos ao nosso exemplo das marcações, que podem ter vários espaços em branco após o identificador, então <b > e </b > são válidos. Vamos colocar essa condição na ER:

</?[BIPbip] *>        </B>, </B >, </B  >, ..., <p         >, ...

Note que agora com o asterisco, nossa ER já não tem mais um número finito de possibilidades. Vejamos como fica a leitura dessa ER: um <, seguido ou não de uma /, seguido de: ou B, ou I, ou P, ou b, ou i, ou p, seguido ou não de vários espaços, seguido de >.

Apresentando a gulodice

Pergunta: o que casará [ar]*a na palavra arara? Alternativas:

1) a            [ar] zero vezes, seguido de a
2) ara          [ar] duas vezes (a,r), seguido de a
3) arara        [ar] quatro vezes (a,r,a,r), seguido de a
4) n.d.a.

Acertou se você escolheu a número 3. O asterisco repete em qualquer quantidade, mas ele sempre tentará repetir o máximo que conseguir. As três alternativas são válidas, mas entre casar a lista [ar] zero, duas ou quatro vezes, ele escolherá o maior número possível. Por isso se diz que o asterisco é guloso.

Essa gulodice às vezes é boa, às vezes é ruim. Os próximos quantificadores, mais e chaves, bem como o opcional já visto, são igualmente gulosos. Mais detalhes sobre o assunto, confira mais adiante.

Apresentando o curinga .*

Vimos até agora que temos dois metacaracteres extremamente abrangentes, como o ponto (qualquer caractere) e o asterisco (em qualquer quantidade). E se juntarmos os dois? Teremos qualquer caractere, em qualquer quantidade. Pára um instante para pensar nisso. O que isso significa, tudo? Nada? A resposta é: ambos.

O nada, pois "qualquer quantidade" também é igual a "nenhuma quantidade". Então é opcional termos qualquer caractere, não importa. Assim, uma ER que seja simplesmente .* sempre será válida e casará mesmo uma linha vazia.

O tudo, pois "qualquer quantidade" também é igual a "tudo o que tiver". E é exatamente isso o que o asterisco faz, ele é guloso, ganancioso, e sempre tentará casar o máximo que conseguir. Repita comigo: o MÁXIMO que conseguir.

O curinga .* é qualquer coisa!

Assim, temos aqui o curinga das ERs, uma carta para se usar em qualquer situação. É muito comum ao escrever uma expressão regular, você definir alguns padrões que procura, e lá no meio, em uma parte que não importa, pode ser qualquer coisa, você coloca um .* e depois continua a expressão normalmente.

Por exemplo, para procurar ocorrência de duas palavras na mesma linha, relatório.*amanhã serve para achar aquela linha maldita em que lhe pediram um trabalho "pra ontem". Ou, ainda, procurar acessos de usuários em uma data qualquer: 22/11/2001.*login.

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