Leia a ER átomo por átomo, da esquerda para a direita.
fala[r!]?Um f seguido de um a, seguido de um l, seguido de um a, seguido de: ou r, ou !, ambos opcionais.
resultado = fala[r!]? falar, fala!, fala
curinga .* Teremos qualquer caractere, em qualquer quantidade. uma carta para se usar em qualquer situação.
Expressões são Case Sensitive
[0123456789] é igual a [0-9]
Não use o intervalo A-z, prefira A-Za-z
Linhas que tenham entre 20 e 60 caracteres:
^.{20,60}$
Expressão para casar um número de RG no formato n.nnn.nnn-n? É fácil!
[0-9]\.[0-9]{3}\.[0-9]{3}-[0-9]
Caracteres acentuados (POSIX)
Classe POSIX | Similar | Significado |
[:upper:] | [A-Z] | letras maiúsculas |
[:lower:] | [a-z] | letras minúsculas |
[:alpha:] | [A-Za-z] | maiúsculas/minúsculas |
[:alnum:] | [A-Za-z0-9] | letras e números |
[:digit:] | [0-9] | números |
[:xdigit:] | [0-9A-Fa-f] | números hexadecimais |
[:punct:] | [.,!?:...] | sinais de pontuação |
[:blank:] | [ \t] | espaço e TAB |
[:space:] | [ \t\n\r\f\v] | caracteres brancos |
[:cntrl:] | - | caracteres de controle |
[:graph:] | [^ \t\n\r\f\v] | caracteres imprimíveis |
[:print:] | [^\t\n\r\f\v] | imprimíveis e o espaço |
Para dizer maiúsculas, fica [[:upper:]], ou seja um [:upper:] dentro de uma lista []
O [[:upper:]] é uma classe POSIX dentro de uma lista.
POSIX levam em conta a localidade do sistema. ou seja (acentuação está disponível).
Nos Estados Unidos, [[:upper:]] é igual a [A-Z].
No Brasil, [[:upper:]] é igual [A-ZÁÃÂÀÉÊÍÓÕÔÚÇ...]
ERs que procurarão em textos em português, prefira [:alpha:] em vez de A-Za-z, sempre.
Meta | Mnemônico |
. | Ponto |
[] | Lista |
[^] | Lista negada |
? | Opcional |
* | Asterisco |
+ | Mais |
{} | Chaves |
^ | Circunflexo |
$ | Cifrão |
\b | Borda |
\ | Escape |
| | ou |
() | Grupo |
\1 | Retrovisor |
Meta | Mnemônico | Função |
. | Ponto | Um caractere qualquer |
[...] | Lista | Lista de caracteres permitidos |
[^...] | Lista negada | Lista de caracteres proibidos |
São metacaracteres cuja função é representar um ou mais caracteres.
Também podem ser encarados como apelidos, links, ou qualquer outra coisa que lhe lembre essa associação entre elementos.
Todos os metacaracteres deste tipo casam a posição de um único caractere, e não mais que um.
ponto casa com qualquer coisa- n.o - não, nao, ...
- .eclado - teclado, Teclado, ...
- e.tendido - estendido, extendido, eztendido, ...
- n[ãa]o - não, nao
- [Tt]eclado - Teclado, teclado
- e[sx]tendido - estendido, extendido
12[:. ]45 - 12:45, 12.45, 12 45
- *lista casa com quem ela quer
- *dentro da lista, todo mundo é normal.
- A lista casa com quem ela conhece e tem suas próprias regras.
- Dentro da lista, todo mundo é normal.
- Dentro da lista, traço indica intervalo.
- Um - literal deve ser o último item da lista.
- Um ] literal deve ser o primeiro item da lista.
- Os intervalos respeitam a tabela ASCII (não use A-z).
- [:classes POSIX:] incluem acentuação, A-Z não.
A lista negada é exatamente igual à lista, podendo ter caracteres literais, intervalos e classes POSIX. Tudo o que se aplica a lista normal, se aplica à negada também.
A única diferença é que ela possui lógica inversa, ou seja, ela casará com qualquer coisa, fora os componentes listados.
Sempre após caracteres de pontuação como a vírgula ou o ponto, devemos ter um espaço em branco os separando do resto do texto. Então vamos procurar por qualquer coisa que não há espaço após a pontuação:
[:;,.!?][^ ] ou [[:punct:]][^ ]
Uma lista negada segue todas as regras de uma lista normal. Um ^ literal não deve ser o primeiro item da lista. [:classes POSIX:] podem ser negadas. A lista negada sempre deve casar algo.
</tbody>
Meta | Mnemônico | Função |
? | opcional | zero ou um |
* | asterisco | zero, um ou mais |
+ | mais | um ou mais |
{n,m} | chaves | de n até m |
Todos os quantificadores são gulosos
ER 6? significa zero ou uma ocorrência do número 6. Se tiver um 6, beleza, Se não tiver, beleza também.
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 atomo e não à palavra toda.
O opcional é opcional.
O opcional é útil para procurar palavras no singular e plural. Podemos tornar opcionais caracteres e metacaracteres. Leia a ER átomo por átomo, da esquerda para a direita. Leia a ER, entenda o todo e analise as possibilidades.
Em outras palavras, a entidade anterior pode aparecer em qualquer quantidade Quantificadores são gulosos.
Pode começar apenas com tex e ele irá percorrer buscando tudo que encontrar, iniciado com tex
O curinga .* é o tudo e o nada, qualquer coisa.
O mais tem funcionamento idêntico ao do asterisco, tudo o que vale para um, se aplica ao outro.
Sua utilidade é quando queremos no mínimo uma repetição, é um asterisco mais exigente.
Pode começar apenas com tex e ele irá percorrer buscando tudo que encontrar, iniciado com tex e tem que haver uma repeticao de tex pelomenos 1 vez
O mais repete em qualquer quantidade, pelo menos uma vez.
Você pode especificar um número exato, um mínimo, um máximo, ou uma faixa numérica.- Chaves são precisas.
- As chaves simulam o *, o + e a ?.
- As chaves não são o Chaves.
Meta | Mnemônico | Função |
^ | circunflexo | Início da linha |
$ | cifrão | Fim da linha |
\b | borda | Início ou fim de palavra |
Similar e complementar ao circunflexo, o cifrão marca o fim de uma linha e só é válido no final de uma ER. Como o exemplo anterior, [0-9]$ casa linhas que terminam com um número.
Só é especial no final da ER.
É cifrão e não dólar.
- A borda marca os limites de uma palavra.
- O conceito "palavra" engloba letras, números e o sublinhado.
- A borda é útil para casar palavras exatas e não parciais.
Meta | Mnemônico | Função |
\c | Escape | Torna literal o caractere c |
| | ou | ou um ou outro |
(...) | Grupo | Delimita um grupo |
\1...\9 | Retrovisor | Texto casado nos grupos 1...9 |
Escapando, \* é igual a [*] que é igual a um asterisco literal. Similarmente podemos escapar todos os metacaracteres já vistos:
\., \[ , \], \?, \+ , \{, \}, \^ e \$.
E para você ver como são as coisas, o escape é tão poderoso que pode escapar a si próprio! O \\ casa uma barra invertida \ literal.
O escape escapa um metacaractere, tirando seu poder.
\* = [*] = asterisco literal.
O escape escapa o escape, escapando-se a si próprio simultaneamente.
- O ou indica alternativas.
- Lista para um caractere, ou para vários.
- O grupo multiplica o poder do ou.
- Grupos servem para agrupar.
- Grupos são muito poderosos.
- Grupos podem conter grupos.
- Grupos são quantificáveis.
- O retrovisor só funciona se usado com o grupo.
- O retrovisor serve para procurar palavras repetidas.
- Numeram-se retrovisores contando os grupos da esquerda para a direita.
- Temos no máximo 9 retrovisores por ER.
?? opcional não-guloso *? asterisco não-guloso +? mais não-guloso {n,m}? chaves não-gulosas
não-gulosos | |
a.*? | a |
a.+? | aa |
a.?? | a |
a.{1,3}? | aa |
Barra-letra.
b-l POSIX equiv. | mnemônico |
\d [[:digit:]] | dígito |
\D [^[:digit:]] | não-dígito |
\w [[:alnum:]_] | palavra |
\W [^[:alnum:]_] | não-palavra |
\s [[:space:]] | branco |
\S [^[:space:]] | não-branco |
ER para casar o RG:
[0-9]\.[0-9]{3}\.[0-9]{3}-[0-9]
\d\.\d{3}\.\d{3}-\d
(?#comentário)