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 >
.
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.
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