O opcional é um quantificador que não esquenta a cabeça, para ele pode ter ou não a ocorrência da entidade anterior, pois ele a repete 0 ou 1 vez. Por exemplo, a ER 6?
significa zero ou uma ocorrência do número 6. Se tiver um 6, beleza, casamento efetuado. Se não tiver, beleza também. Isso torna o 6 opcional (daí o nome), que tendo ou não, a ER casa. Veja mais um exemplo, o plural. A ER ondas?
tem a letra s
marcada como opcional, então ela casa onda e ondas.
Cada letra normal é um átomo da ER, então o opcional é aplicado somente ao s e não à palavra toda.
E essa tal de entidade pode ser um metacaractere então?
Claro! Agora vamos começar a ver o poder de uma expressão regular. Já vimos o metacaractere lista e agora vimos o opcional, que tal fazermos uma lista opcional? Voltando um pouco àquele exemplo da palavra fala, vamos fazer a ER fala[r!]?
. Mmmmmm, as ERs estão começando a ficar interessantes não? Mas antes de analisar essa ER, uma dica que vale ouro, memorize já: leia a ER átomo por átomo, da esquerda para a direita. Repetindo: leia a ER átomo por átomo, da esquerda para a direita.
É bem simples, uma ER se lê exatamente como o robozinho (lembra quem ele é?) leria. Primeiro lê-se átomo por átomo, depois entende-se o todo e depois se analisa as possibilidades. Na nossa ER fala[r!]?
em questão, sua leitura fica: um f
seguido de um a
, seguido de um l
, seguido de um a
, seguido de: ou r
, ou !
, ambos opcionais.
Essa leitura é essencial para o entendimento da ER. Ela pode em um primeiro momento ser feita em voz alta, de maneira repetitiva, até esse processo se tornar natural. Depois ela pode ser feita mentalmente mesmo, e de maneira automática. É como você está fazendo agora repetindo mentalmente estas palavras escritas aqui enquanto as lê. Você não percebe, faz normalmente.
Feita a leitura, agora temos de entender o todo, ou seja, temos um trecho literal fala, seguido de uma lista opcional de caracteres. Para descobrirmos as possibilidades, é o fala seguido de cada um dos itens da lista e por fim seguido por nenhum deles, pois a lista é opcional. Então fica:
fala[r!]? falar, fala!, fala
Pronto! Desvendamos os segredos da ER. É claro, esta é pequena e fácil, mas o que são ER grandes senão várias partes pequenas agrupadas? O principal é dominar essa leitura por átomos. O resto é ler devagar até chegar ao final. Não há segredo.
Então voltemos ao nosso exemplo de marcações HTML, podemos facilmente incluir agora as marcações que fecham o trecho, em que a única diferença é que vem uma barra / antes da letra:
</?[BIPbip]> </B>, </I>, </P>, </b>, </i>, </p>, <B>, <I>, <P>, <b>, <i>, <p>
Por alguns segundos, contemple a ER anterior. Estamos começando a dizer muito com poucos caracteres, sendo específicos. Vamos continuar que vai ficar cada vez mais interessante.
Resumão