Expressões Regulares
Parte II
Jackson Veroneze
Software Developer
jackson@jacksonveroneze.com
https://jacksonveroneze.com
Elisabeth Koroll
Software Developer
lisafkoroll@gmail.com
Patrick Souza do Nascimento
Software Developer
patrick@microvision.com.br
https://www.microvision.com.br
Sumário
Metacaracteres - Continuação
Quantificadores gulosos
Quantificadores não gulosos
Multilinha
Boas práticas com expressão regular
Metacaracteres
. ? * + ^ $ | [ ] { } ( ) 
Cada símbolo tem uma função específica, porém pode mudar dependendo do contexto no qual está
inserido.
Pode-se combinar uns com os outros, fazendo construções mais complexas.
Metacaracteres
Estão divididos em quatro grupos
Representantes
Quantificadores
Âncoras
Outros
Metacaracteres - Âncoras
Não casam e não definem quantidades
Eles marcam uma posição específica na linha
Não podem ser quantificados, ou seja, o mais, o asterisco, não tem influência sobre eles.
Metacaracteres - Âncoras
Metacaractere Nome Função
^ Circunflexo Início da linha
$ Cifrão Fim da linha
b Borda Início ou fim da palavra
Metacaracteres - Âncoras(Circunflexo - ^)
Marca o começo de uma string, por exemplo:
^[0-9] Casa linhas que iniciam com números.
Não podemos confundir com a lista negada, por exemplo:
^[^0-9] Casa linhas que não iniciam com números. O primeiro circunflexo é a âncora, e o segundo é o negador da
lista.
O circunflexo só funciona como âncora se estiver no começo da linha, por exemplo:
[0-9]^ Casa com um número seguido de um circunflexo literal, em qualquer posição da linha.
Metacaracteres - Âncoras(Cifrão - $)
Marca o fim de uma linha.
[0-9]$ Casa com linhas que terminam com números.
Unindo o circunflexo com o cifrão, podemos procurar por linhas vazias. Por exemplo:
^$ Casa com uma linha vazia
^.{20,60}$ Casa com linhas que têm entre 20 e 60 caracteres.
Metacaracteres - Âncoras(Borda - b)
Marca os limites de uma palavra, ou seja, onde ela começa e termina.
Muito útil para casar palavras exatas e não partes de palavras.
Forma um começo ou a terminação de uma palavra. Entenda que “palavra” é um conceito que
engloba [A-Za-z0-9_], ou seja, apenas letras, números e sublinhado.
Expressão Casa com
dia dia, diafragma, melodia, radial, bom-dia!
bdia dia, diafragma, bom-dia!
diab dia, melodia, bom-dia!
bdiab dia, bom-dia!
Metacaracteres - Outros
Tem funções específicas e não relacionadas entre si.
Não podem ser agrupados em outra classe
Metacaracteres - Outros
Metacaractere Nome Função
c Escape Torna literal o caractere c
| Ou Um ou outro
(...) Grupo Delimita um grupo
1…9 Retrovisor Texto casado nos grupos 1 … 9
Metacaracteres - Outros(Escape - )
Escapa um metacaractere, tirando seus poderes.
Torna o metacaracteres literal(uma simples string).
. ? * + ^ $ | [ ] { } ( )
Metacaracteres - Outros(Ou - |)
Utilizado quando temos mais de uma alternativa possível para casar.
A lista [a-z], também é uma espécie de ou(|), mas apenas para uma letra. Neste caso prefira a lista.
Por exemplo:
[gpr]ato casa com gato, pato, rato.
Quando for mais de uma letra, use o ou. Por exemplo.
http://|ftp://
Metacaracteres - Outros(Grupo - (...))
Dentro de um grupo, podemos ter um ou mais caracteres, metacaractere e outros grupos.
Todos os metacaracteres quantificadores tem seu poder ampliado pelo grupo.
O metacaracter |(ou) tem sua abrangência limitada pelo grupo, porém essa limitação lhe dá mais
poder.
Expressão Casa com
(ha!)+ ha!, ha!ha!, ha!ha!ha!
(.[0-9]){3} .0.6.2, .2.8.9, .7.7.7
(www.)?zz.com www.zz.com, zz.com
Metacaracteres - Outros(Grupo - (...))
Ou(|) ganha limites e seu poder cresce.
Expressão Casa com
boa-(tarde|noite) boa-tarde, boa-noite
(#|n.|núm) 7 # 7, n.7, núm 7
(in|con)?certo incerto, concerto, certo
Metacaracteres - Outros(Grupo - (...))
O grupo não altera o sentido da expressão regular, apenas serve como marcador.
Grupos são quantificáveis.
Podemos criar sub-grupos. Por exemplo
Expressão Casa com
((su|hi)per)?mercado supermercado, hipermercado, mercado
(mini|(su|hi)per)?mercado minimercado, supermercado,
hipermercado, mercado
Metacaracteres - Outros(Retrovisor - 1 … 9)
Ao usar um grupo, o trecho de texto casado pela expressão regular que está no grupo, fica guardado
em um cantinho especial e pode ser usado em outras partes da mesma expressão.
Chama-se retrovisor porque ele olha para trás, para buscar um trecho já casado.
É útil para casar trechos repetidos em uma mesma linha.
Utilizamos o caractere “” para mencionar um retrovisor, o mesmo utilizado para tirar os poderes de
um metacaractere. Porém como o próximo caractere é um número não vai ser escapado.
Podemos ter no máximo 9 retrovisores na expressão regular.
Muitas linguagens de programação fazem substituição de caracteres usando expressão regular.
Metacaracteres - Outros(Retrovisor - 1 … 9)
Para não se perder na contagem , conte somente os parênteses que abrem da esquerda para a direita.
Este vai ser o número do retrovisor.
O conteúdo é o texto casado para expressão regular do parêntese que abre até seu correspondente
que fecha.
Expressão Casa com
<(w{1,})>.*</1> <h1>a</h1>, <h2>a</h2>
(lenta)(mente) é 2 1 lentamente é mente lenta
((band)eira)nte 1 2a bandeirante bandeira banda
Quantificadores gulosos
Os operadores de repetição ou quantificadores
casam o máximo possível
METACARACTERES NOME
? Opcional
* Asterisco
+ Mais
{} Chaves
Quantificadores gulosos
Exemplo:
Regex: <.*> Texto: um <b>negrito</b> aqui.
Os trechos já casados são representados pelos x marcando a frase e as aspas marcam a ER. Os pontinhos representam apenas os "rastros" do foco,
as partes já visitadas e não casadas.
um <b>negrito</b> aqui.
...xxxxxxxxxxxxxxxxxxxx
um <b>negrito</b> aqui.
...x <
....xxxxxxxxxxxx .*
................x >
Quantificadores gulosos
Resultado Obtido: Resultado Desejado
um <b>negrito</b> aqui.
...xxxxxxxxxxxxxx
um <b>negrito</b> aqui
....x.........xx
Opção para utilização
um <b>negrito</b> aqui. Regex
...xxxxxxxxxxxxxx <.*>
...xxx…….xxxx <[^>]*> | <.*?>
Quantificadores não-gulosos
Adicionar a interrogação logo após os quantificadores normais
O menor casamento possível
METACARACTERES NOME
??
*?
+?
{}?
Opcional não-guloso
Asterisco não-guloso
Mais não-guloso
Chaves não-gulosas
Quantificadores não-gulosos
Só casa se o próximo átomo da ER não estiver precisando daquele caractere
GULOSOS NÃO-GULOSOS
ab*
ab+
ab?
ab{1,3}
abbbb
abbbb
ab
abbb
ab*?
ab+?
ab??
ab{1,3}?
a
ab
a
ab
Multilinha
utilizamos dois os modificadores:
um para tratar estas várias linhas como apenas uma ( . também casa /n)
outro para complementar e tratar como várias linhas ( ^ e $ ) para casar começo e final de qualquer
uma dessas linhas
Multilinha
Exemplo : $a = $b = $c = "linha 1nlinha 2nlinha 3";
Regex Estilo Resultado
$a =~ s/^.*/!!/g ; print "$an-------n"; Normal !!
linha 2
linha 3
$b =~ s/^.*/!!/gs; print "$bn-------n"; Uma linha !!
$c =~ s/^.*/!!/gm; print "$cn-------n"; Multilinha !!
!!
!!
Boas práticas com Expressão Regular
No mundo das ERs, temos diversas leis não escritas que hora ou outra vão bater à sua porta e você verá
que segui-las fará com que suas ERs sejam mais precisas e não falhem.
Sobre performance, em situações normais é desnecessário preocupar-se com a velocidade do ER,
independente de como você o faça o resultado será instantaneamente. Porém quando aplicado a vários
arquivos ou um arquivo muito extenso, a demora pode ser grande.
As dicas que seguem, no geral, podem ser usadas em qualquer tipo de programa ou linguagem, pois são
detalhes conceituais e não dependentes de implementação.
Boas práticas com Expressão (NÃO COMPLIQUE)
Ao construir uma ER, lembre-se de que um dia alguém ou provavelmente você mesmo terá de dar
manutenção a ela. Tendo isso em mente evite fazer construções complicadas e desnecessárias.
Nem sempre a menor ER é a melhor. Vamos ver um exemplo bem simples de um ER que casa um
número de RG
[0-9].[0-9]{3}.[0-9]{3}-[0-9]
Note que o trecho para casar um ponto e três números seguidos repete duas vezes, então podemos
agrupá-lo e aplicar as chaves, diminuindo o Tamanho da ER.
[0-9](.[0-9]{3}){2}-[0-9]
Boas práticas com Expressão (NÃO COMPLIQUE)
Outro exemplo de simplificação de uma ER.
(mini|su|hi)per)?mercado
Será que se deixássemos mais simples não ficaria mais fácil de entendê-la?
Boas práticas com Expressão (NÃO COMPLIQUE)
(mini|super|hiper)?mercado
Simples não?
Então, muito cuidado ao colocar grupos dentre de grupos, quantificar grupos, usar chaves quando se
pode usar asterisco, entre outros. Procure manter sua ER simples. Como dizem os Gringros:
KISS (Keep it Simples, Stupid) “Deixe Simples, Mané).
Boas práticas com Expressão (USE CIRCUNFLEXO)
Sempre que possível, comece sua ER com o circunflexo. Como já vimos, o robozinho tenta casar,
caracter por caracter da esquerda para a direita a partir do começo da linha. Então o ponto inicial de
pesquisa é o começo da linha.
Se você coloca o circunflexo na seu ER, forçando o casamento do começo de linha, se o primeiro
componente da ER após o ^ já não casar com primeiro caractere da linha, dali mesmo ja retornará falha
de pesquisa, sem precisar varrer o resto da linha.
Boas práticas com Expressão (USE CIRCUNFLEXO)
Por exemplo, se você procurar valores em reais, pode simplesmente dizer R$. Mas se você sabe que os
reais que lhe interessam estão sempre no começo da linha, diga isso com sua ER: ^R$
Exemplo :
R$ 200,00 : Fósforo e velas
essenciais na crise de energia.
comprados das marcas mais baratas.
R$ 100,00 caixas de ovos vazias.
Boas práticas com Expressão (Evite a Lista Negada)
A lista negada é grande aliado quando não se sabe exatamente que tipo de dado está em um
determinada posição.
Mas lembre-se: a tabela ASCII estendida tem 255 caracteres. Dizer algo como [^:] Significa negar um
caractere e permitir outros 254, o que muitas vezes é um exagero.
Nesse exemplo : se o tipo de dado que não pode ser os dois-pontos forem letras números e alguns
símbolos, liste-os :
[A-Za-z0-9,.()%!]
● Não tenha preguiça de descobrir todas as possibilidades de uma posição.
Boas práticas com Expressão (Evite o curinga)
Quando pegamos o jeito com expressões regulares, é comum usar o * para qualquer situação, pois
como todo curinga que se preze, é uma mão na roda. Mas à medida que você vai usando ERs para
coisas mais complicadas você começa a perceber que a causa de grande parte de seus problemas foi
ter usado o curinga guloso e genérico onde você poderia ter sido mais específico e que ele casou o que
não devia.
.
Boas práticas com Expressão (Seja específico)
Agora a regra de ouro, aquela que acaba resumindo as outras, a mãe de todas: Seja específico.
Memorize isso, seja específico.
Se você sempre tiver esta regra em mente, as chances de falha ficam muito reduzidas. Os
metacaracteres são vários e servem para criarmos um universo de possibilidades para casarmos um
texto.
Você deve saber exatamente que tipo de dado procura. Um conhecimento do trecho que se quer casar
acontece quando se pode responder a estas três perguntas.
O que você quer casar?
Em que quantidade?
Boas práticas com Expressão (Não seja afobado
seja ninja)
Se sua ER ficar grande e cheia de alternativas, é sinal de que você está conseguindo dizer ao robozinho
exatamente o que quer. E assim é que se fazem ERs complicadas. De grão em grão…
Tolo é aquele que senta e quer escrever o todo de uma vez! A arte de criar ERs deve ser saboreada, sem
pressa e com inspiração.
Boas práticas com Expressão (Não seja afobado
seja ninja)
hh:mm
.. : ..
[0-9{2}:[0-9{2}
[012][0-9] :[0-9{2}
[012][0-9 ]:[0-5][0-9]
([01][0-9]|2[[0-3]):[0-5][0-9]
Boas práticas com Expressão (Não seja afobado
seja ninja)
dd/mm/aaaa
.. /../ ..
[0-9]{2}/[[0-9]{2}/[0-9]{4}
[0123][0-9]/[0-9]{2}/[0-9]{4}
[0123][0-9]/[01][0-9]/[0-9]{4}
[0123][0-9]/[01][0-9]/[12][0-9]{3}
Boas práticas com Expressão (Não seja afobado
seja ninja)
usuario@dominio.zz
.*@.*
[^@]*@[^@]*
[^@]+@[^@]*
[A-Za-z0-9_.-]+@[A-Za-z0-9_.]+
[A-Za-z0-9_.-]+@[A-Za-z0-9_.]+.[a-z]{2,3}
Referências
http://www.numaboa.com.br/informatica/tutos/regex/815-regex-caracteres
https://blog.kov.eti.br/2008/08/diversao-com-expressoes-regulares/
JARGAS, Aurelio Marinho. Expressões Regulares: Uma abordagem divertida. 4.ed. São Paulo: Novatec,
2012. 224p.
JARGAS, Aurelio Marinho. Expressões Regulares: Uma abordagem divertida. 3.ed. São Paulo: Novatec,
2009. 207p.

Expressões Regulares - Parte II

  • 1.
  • 2.
    Jackson Veroneze Software Developer jackson@jacksonveroneze.com https://jacksonveroneze.com ElisabethKoroll Software Developer lisafkoroll@gmail.com Patrick Souza do Nascimento Software Developer patrick@microvision.com.br https://www.microvision.com.br
  • 3.
    Sumário Metacaracteres - Continuação Quantificadoresgulosos Quantificadores não gulosos Multilinha Boas práticas com expressão regular
  • 4.
    Metacaracteres . ? *+ ^ $ | [ ] { } ( ) Cada símbolo tem uma função específica, porém pode mudar dependendo do contexto no qual está inserido. Pode-se combinar uns com os outros, fazendo construções mais complexas.
  • 5.
    Metacaracteres Estão divididos emquatro grupos Representantes Quantificadores Âncoras Outros
  • 6.
    Metacaracteres - Âncoras Nãocasam e não definem quantidades Eles marcam uma posição específica na linha Não podem ser quantificados, ou seja, o mais, o asterisco, não tem influência sobre eles.
  • 7.
    Metacaracteres - Âncoras MetacaractereNome Função ^ Circunflexo Início da linha $ Cifrão Fim da linha b Borda Início ou fim da palavra
  • 8.
    Metacaracteres - Âncoras(Circunflexo- ^) Marca o começo de uma string, por exemplo: ^[0-9] Casa linhas que iniciam com números. Não podemos confundir com a lista negada, por exemplo: ^[^0-9] Casa linhas que não iniciam com números. O primeiro circunflexo é a âncora, e o segundo é o negador da lista. O circunflexo só funciona como âncora se estiver no começo da linha, por exemplo: [0-9]^ Casa com um número seguido de um circunflexo literal, em qualquer posição da linha.
  • 9.
    Metacaracteres - Âncoras(Cifrão- $) Marca o fim de uma linha. [0-9]$ Casa com linhas que terminam com números. Unindo o circunflexo com o cifrão, podemos procurar por linhas vazias. Por exemplo: ^$ Casa com uma linha vazia ^.{20,60}$ Casa com linhas que têm entre 20 e 60 caracteres.
  • 10.
    Metacaracteres - Âncoras(Borda- b) Marca os limites de uma palavra, ou seja, onde ela começa e termina. Muito útil para casar palavras exatas e não partes de palavras. Forma um começo ou a terminação de uma palavra. Entenda que “palavra” é um conceito que engloba [A-Za-z0-9_], ou seja, apenas letras, números e sublinhado. Expressão Casa com dia dia, diafragma, melodia, radial, bom-dia! bdia dia, diafragma, bom-dia! diab dia, melodia, bom-dia! bdiab dia, bom-dia!
  • 11.
    Metacaracteres - Outros Temfunções específicas e não relacionadas entre si. Não podem ser agrupados em outra classe
  • 12.
    Metacaracteres - Outros MetacaractereNome Função c Escape Torna literal o caractere c | Ou Um ou outro (...) Grupo Delimita um grupo 1…9 Retrovisor Texto casado nos grupos 1 … 9
  • 13.
    Metacaracteres - Outros(Escape- ) Escapa um metacaractere, tirando seus poderes. Torna o metacaracteres literal(uma simples string). . ? * + ^ $ | [ ] { } ( )
  • 14.
    Metacaracteres - Outros(Ou- |) Utilizado quando temos mais de uma alternativa possível para casar. A lista [a-z], também é uma espécie de ou(|), mas apenas para uma letra. Neste caso prefira a lista. Por exemplo: [gpr]ato casa com gato, pato, rato. Quando for mais de uma letra, use o ou. Por exemplo. http://|ftp://
  • 15.
    Metacaracteres - Outros(Grupo- (...)) Dentro de um grupo, podemos ter um ou mais caracteres, metacaractere e outros grupos. Todos os metacaracteres quantificadores tem seu poder ampliado pelo grupo. O metacaracter |(ou) tem sua abrangência limitada pelo grupo, porém essa limitação lhe dá mais poder. Expressão Casa com (ha!)+ ha!, ha!ha!, ha!ha!ha! (.[0-9]){3} .0.6.2, .2.8.9, .7.7.7 (www.)?zz.com www.zz.com, zz.com
  • 16.
    Metacaracteres - Outros(Grupo- (...)) Ou(|) ganha limites e seu poder cresce. Expressão Casa com boa-(tarde|noite) boa-tarde, boa-noite (#|n.|núm) 7 # 7, n.7, núm 7 (in|con)?certo incerto, concerto, certo
  • 17.
    Metacaracteres - Outros(Grupo- (...)) O grupo não altera o sentido da expressão regular, apenas serve como marcador. Grupos são quantificáveis. Podemos criar sub-grupos. Por exemplo Expressão Casa com ((su|hi)per)?mercado supermercado, hipermercado, mercado (mini|(su|hi)per)?mercado minimercado, supermercado, hipermercado, mercado
  • 18.
    Metacaracteres - Outros(Retrovisor- 1 … 9) Ao usar um grupo, o trecho de texto casado pela expressão regular que está no grupo, fica guardado em um cantinho especial e pode ser usado em outras partes da mesma expressão. Chama-se retrovisor porque ele olha para trás, para buscar um trecho já casado. É útil para casar trechos repetidos em uma mesma linha. Utilizamos o caractere “” para mencionar um retrovisor, o mesmo utilizado para tirar os poderes de um metacaractere. Porém como o próximo caractere é um número não vai ser escapado. Podemos ter no máximo 9 retrovisores na expressão regular. Muitas linguagens de programação fazem substituição de caracteres usando expressão regular.
  • 19.
    Metacaracteres - Outros(Retrovisor- 1 … 9) Para não se perder na contagem , conte somente os parênteses que abrem da esquerda para a direita. Este vai ser o número do retrovisor. O conteúdo é o texto casado para expressão regular do parêntese que abre até seu correspondente que fecha. Expressão Casa com <(w{1,})>.*</1> <h1>a</h1>, <h2>a</h2> (lenta)(mente) é 2 1 lentamente é mente lenta ((band)eira)nte 1 2a bandeirante bandeira banda
  • 20.
    Quantificadores gulosos Os operadoresde repetição ou quantificadores casam o máximo possível METACARACTERES NOME ? Opcional * Asterisco + Mais {} Chaves
  • 21.
    Quantificadores gulosos Exemplo: Regex: <.*>Texto: um <b>negrito</b> aqui. Os trechos já casados são representados pelos x marcando a frase e as aspas marcam a ER. Os pontinhos representam apenas os "rastros" do foco, as partes já visitadas e não casadas. um <b>negrito</b> aqui. ...xxxxxxxxxxxxxxxxxxxx um <b>negrito</b> aqui. ...x < ....xxxxxxxxxxxx .* ................x >
  • 22.
    Quantificadores gulosos Resultado Obtido:Resultado Desejado um <b>negrito</b> aqui. ...xxxxxxxxxxxxxx um <b>negrito</b> aqui ....x.........xx Opção para utilização um <b>negrito</b> aqui. Regex ...xxxxxxxxxxxxxx <.*> ...xxx…….xxxx <[^>]*> | <.*?>
  • 23.
    Quantificadores não-gulosos Adicionar ainterrogação logo após os quantificadores normais O menor casamento possível METACARACTERES NOME ?? *? +? {}? Opcional não-guloso Asterisco não-guloso Mais não-guloso Chaves não-gulosas
  • 24.
    Quantificadores não-gulosos Só casase o próximo átomo da ER não estiver precisando daquele caractere GULOSOS NÃO-GULOSOS ab* ab+ ab? ab{1,3} abbbb abbbb ab abbb ab*? ab+? ab?? ab{1,3}? a ab a ab
  • 25.
    Multilinha utilizamos dois osmodificadores: um para tratar estas várias linhas como apenas uma ( . também casa /n) outro para complementar e tratar como várias linhas ( ^ e $ ) para casar começo e final de qualquer uma dessas linhas
  • 26.
    Multilinha Exemplo : $a= $b = $c = "linha 1nlinha 2nlinha 3"; Regex Estilo Resultado $a =~ s/^.*/!!/g ; print "$an-------n"; Normal !! linha 2 linha 3 $b =~ s/^.*/!!/gs; print "$bn-------n"; Uma linha !! $c =~ s/^.*/!!/gm; print "$cn-------n"; Multilinha !! !! !!
  • 27.
    Boas práticas comExpressão Regular No mundo das ERs, temos diversas leis não escritas que hora ou outra vão bater à sua porta e você verá que segui-las fará com que suas ERs sejam mais precisas e não falhem. Sobre performance, em situações normais é desnecessário preocupar-se com a velocidade do ER, independente de como você o faça o resultado será instantaneamente. Porém quando aplicado a vários arquivos ou um arquivo muito extenso, a demora pode ser grande. As dicas que seguem, no geral, podem ser usadas em qualquer tipo de programa ou linguagem, pois são detalhes conceituais e não dependentes de implementação.
  • 28.
    Boas práticas comExpressão (NÃO COMPLIQUE) Ao construir uma ER, lembre-se de que um dia alguém ou provavelmente você mesmo terá de dar manutenção a ela. Tendo isso em mente evite fazer construções complicadas e desnecessárias. Nem sempre a menor ER é a melhor. Vamos ver um exemplo bem simples de um ER que casa um número de RG [0-9].[0-9]{3}.[0-9]{3}-[0-9] Note que o trecho para casar um ponto e três números seguidos repete duas vezes, então podemos agrupá-lo e aplicar as chaves, diminuindo o Tamanho da ER. [0-9](.[0-9]{3}){2}-[0-9]
  • 29.
    Boas práticas comExpressão (NÃO COMPLIQUE) Outro exemplo de simplificação de uma ER. (mini|su|hi)per)?mercado Será que se deixássemos mais simples não ficaria mais fácil de entendê-la?
  • 30.
    Boas práticas comExpressão (NÃO COMPLIQUE) (mini|super|hiper)?mercado Simples não? Então, muito cuidado ao colocar grupos dentre de grupos, quantificar grupos, usar chaves quando se pode usar asterisco, entre outros. Procure manter sua ER simples. Como dizem os Gringros: KISS (Keep it Simples, Stupid) “Deixe Simples, Mané).
  • 31.
    Boas práticas comExpressão (USE CIRCUNFLEXO) Sempre que possível, comece sua ER com o circunflexo. Como já vimos, o robozinho tenta casar, caracter por caracter da esquerda para a direita a partir do começo da linha. Então o ponto inicial de pesquisa é o começo da linha. Se você coloca o circunflexo na seu ER, forçando o casamento do começo de linha, se o primeiro componente da ER após o ^ já não casar com primeiro caractere da linha, dali mesmo ja retornará falha de pesquisa, sem precisar varrer o resto da linha.
  • 32.
    Boas práticas comExpressão (USE CIRCUNFLEXO) Por exemplo, se você procurar valores em reais, pode simplesmente dizer R$. Mas se você sabe que os reais que lhe interessam estão sempre no começo da linha, diga isso com sua ER: ^R$ Exemplo : R$ 200,00 : Fósforo e velas essenciais na crise de energia. comprados das marcas mais baratas. R$ 100,00 caixas de ovos vazias.
  • 33.
    Boas práticas comExpressão (Evite a Lista Negada) A lista negada é grande aliado quando não se sabe exatamente que tipo de dado está em um determinada posição. Mas lembre-se: a tabela ASCII estendida tem 255 caracteres. Dizer algo como [^:] Significa negar um caractere e permitir outros 254, o que muitas vezes é um exagero. Nesse exemplo : se o tipo de dado que não pode ser os dois-pontos forem letras números e alguns símbolos, liste-os : [A-Za-z0-9,.()%!] ● Não tenha preguiça de descobrir todas as possibilidades de uma posição.
  • 34.
    Boas práticas comExpressão (Evite o curinga) Quando pegamos o jeito com expressões regulares, é comum usar o * para qualquer situação, pois como todo curinga que se preze, é uma mão na roda. Mas à medida que você vai usando ERs para coisas mais complicadas você começa a perceber que a causa de grande parte de seus problemas foi ter usado o curinga guloso e genérico onde você poderia ter sido mais específico e que ele casou o que não devia. .
  • 35.
    Boas práticas comExpressão (Seja específico) Agora a regra de ouro, aquela que acaba resumindo as outras, a mãe de todas: Seja específico. Memorize isso, seja específico. Se você sempre tiver esta regra em mente, as chances de falha ficam muito reduzidas. Os metacaracteres são vários e servem para criarmos um universo de possibilidades para casarmos um texto. Você deve saber exatamente que tipo de dado procura. Um conhecimento do trecho que se quer casar acontece quando se pode responder a estas três perguntas. O que você quer casar? Em que quantidade?
  • 36.
    Boas práticas comExpressão (Não seja afobado seja ninja) Se sua ER ficar grande e cheia de alternativas, é sinal de que você está conseguindo dizer ao robozinho exatamente o que quer. E assim é que se fazem ERs complicadas. De grão em grão… Tolo é aquele que senta e quer escrever o todo de uma vez! A arte de criar ERs deve ser saboreada, sem pressa e com inspiração.
  • 37.
    Boas práticas comExpressão (Não seja afobado seja ninja) hh:mm .. : .. [0-9{2}:[0-9{2} [012][0-9] :[0-9{2} [012][0-9 ]:[0-5][0-9] ([01][0-9]|2[[0-3]):[0-5][0-9]
  • 38.
    Boas práticas comExpressão (Não seja afobado seja ninja) dd/mm/aaaa .. /../ .. [0-9]{2}/[[0-9]{2}/[0-9]{4} [0123][0-9]/[0-9]{2}/[0-9]{4} [0123][0-9]/[01][0-9]/[0-9]{4} [0123][0-9]/[01][0-9]/[12][0-9]{3}
  • 39.
    Boas práticas comExpressão (Não seja afobado seja ninja) usuario@dominio.zz .*@.* [^@]*@[^@]* [^@]+@[^@]* [A-Za-z0-9_.-]+@[A-Za-z0-9_.]+ [A-Za-z0-9_.-]+@[A-Za-z0-9_.]+.[a-z]{2,3}
  • 40.
    Referências http://www.numaboa.com.br/informatica/tutos/regex/815-regex-caracteres https://blog.kov.eti.br/2008/08/diversao-com-expressoes-regulares/ JARGAS, Aurelio Marinho.Expressões Regulares: Uma abordagem divertida. 4.ed. São Paulo: Novatec, 2012. 224p. JARGAS, Aurelio Marinho. Expressões Regulares: Uma abordagem divertida. 3.ed. São Paulo: Novatec, 2009. 207p.