Iniciando no mundo das expressões regulares (parte 2)

Este é o segundo artigo da série que nos inicia no conceito de expressões regulares. Neste iremos nos aprofundar em listas, listas negadas, metacaracteres, âncoras, caracteres quantitativos, etc.

[ Hits: 38.097 ]

Por: rudolf ghysio schaarschmidt em 23/11/2003


E lá vem mais metacaracteres



Metacaracter Quantificador


Metacaracteres quantificadores servem para numerar quantas repetições são permitidas para a entidade anterior. Agora não esqueça disso, um quantificador não pode ser quantificado, ou seja, utilizar dois quantificadores seguidos é um erro.

? = O que vem antes dele é opcional

Exemplo:

ER: calar?
Casa: calar cala (única e exclusivamente)

ER: tenta[r,]?
Casa: tenta tentar tenta,

Caiu a ficha?

* = Tanto faz, esse é largadão não interessa quantas vezes vier ele está em todas.

ER: cas*aco
Casa: casssssaco casaco cassaco caaco ....

Interrompendo a nossa programação momentaneamente, vamos mudar um pouco de assunto:

Vamos apresentar a maior descoberta da sua vida depois de aprender a ligar o computador: .*

Mas que diabos é isso? Isso significa TUDO! quantas vezes for e o que for!

Exemplo: asdfghjlkçlçhlkfksjsplrep w ap 0p spo dofg slsd çslkd slkdçfn slkdjf sdlkjf.

Tudo isso acima representamos por .*.

Se quisermos copiar todo o código fonte de uma página? A expressão seria .*.

Viu, só isso representa TUDO!

Mais uma coisa: Como ler uma expressão regular?

fal[ao]

ficaria:
  • um f, seguido de a, seguido de l, seguido de a ou o
e por aí vai...

E por último, vamos aprender o que é gulodice:

Um ótimo exemplo para apresentar a gulodice é o *, pois ele é guloso como qualquer metacaracter quantificador existente. O * tentará casar o MÁXIMO de vezes possíveis.

Exemplo:

ER:[cs]*a
Casa: ca,a,sa,a

Viu só que loucura? Mas é isso mesmo que você está pensando!

+ = quando tem que ter o antecessor dela para casar. A única diferença para o * é que o caracter OBRIGATORIAMENTE deve aparecer pelo menos uma vez.

Exemplo:

ER: a+b
Casa: ab aaaaaaaaaab aaaaaaaaaaaaaaaaaaaab aab

{n,m} = controla quantas vezes se deve repetir sendo "n" igual ao início e m igual ao fim.

Exemplo:

ER: fácil{3,6}
Casa: fácilll fácillll fácilllll fácillllll (somente isso)

Exemplo: achar a tag HTML </ h1>, sendo que ela pode ter até 3 espaços:

ER:</ {0,3}h1>
Casa: </h1> </ h1> </ h1> </ h1>

Mais alguns exemplos de lista:
  • {1,3} - de 1 a 3
  • {3,} - pelo menos 3 (3 ou mais)
  • {0,3} - até 3
  • {3} - exatamente 3
  • {1} - exatamente 1
  • {0,1} - zero ou 1 (igual ao opcional)
  • {0,} - zero ou mais (igual ao asterisco)
  • {1,} - um ou mais (igual ao mais)
Existe mais um grupo de metacaracteres, os do tipo âncora, mas esses grupos são bem específicos e por enquanto não são de extrema necessidade. Caso você precise deles me mande um e-mail que lhe passo todos.

Tá e ai? O que é um metacaracter do tipo âncora?

São metacaracteres que marcam o início e o fim de uma linha por exemplo.

Página anterior     Próxima página

Páginas do artigo
   1. Finalizando pendências
   2. Lista negada
   3. E lá vem mais metacaracteres
   4. Voltando para a [Bb]ene?dita lista
Outros artigos deste autor

Configurando o scanner Epson Perfection 610 USB

Ambiente X-Window, a continuação

Utilizando o Xterm

Bill Gates e Linux

Iniciando no mundo das expressões regulares (parte 1)

Leitura recomendada

Expressões regulares no PHP

Iniciando no mundo das expressões regulares (parte 1)

Verificação da sintaxe do e-mail 1.0

Tags automáticas em URLs com a classe urlmatch da PHP

Usando Blocos Dinâmicos com a Classe FastTemplate (Parte 2)

  
Comentários
[1] Comentário enviado por arknoid em 24/11/2003 - 17:43h

Fico muito feliz por saber que temos quase 70 amigos que estão realmente interessados em expressões regulares... (o:?

[2] Comentário enviado por removido em 07/12/2003 - 22:18h

não to conseguindo montar a expressão regular para validar isso:
1) tenho um array com uma lista de arquvios.
2) não consigo listar os arquivos que não tem extensão!

por exemplo:

teste teste2.doc casa.xls rota.mp3 servidor arquivo

tentei validar (php) mas não consegui usei: ^(.*)

[3] Comentário enviado por fabio em 07/12/2003 - 23:02h

Daniel, tente:

[^\.]

Ou seja, uma lista negada que exclui tudo que tiver o caractere "." (ponto).

[4] Comentário enviado por removido em 08/12/2003 - 20:46h

se eu quisesse excluir tudo que for precedido de "." (ponto) e pós-cedido de qualquer coisa (tipo: .html .minhacasa .h .cas) poderia ser:

[^.*]

???

[5] Comentário enviado por arknoid em 09/12/2003 - 12:19h

nuam meu amigo...olha o que tu tah fazendo...
1º - Te aconselho a colocar a \ antes do ponto pra não ter dúvida que é um ponto literal! (isso pode te economizar futuras dores de cabeça!)

2º- pra ti excluir tudo que tiver um ponto:
-Tu usa a seguinte expressão \.
-Só não esqueçe que estou considerando que você vai aplicar isso no teu vetor de arquivos!
Isso te resultaria todos arquivos que possuem ponto!
Abraços!

[6] Comentário enviado por arknoid em 09/12/2003 - 12:22h

e para NÃO pegar o que tiver ponto:
.*[^\.].*
Qualquer coisa(pode ser um caracter,início de linha espaço qualçquer coisa!)Não pode ter um ponjto literal! e pode ser pós-cedido de qualquer coisa! (inclusive um EOL ou form feed...)

[7] Comentário enviado por tux666 em 10/02/2004 - 20:22h

Tenho que limpar esta linha:

Assunto: 123456789. Post by Fulano (200.135.132.xxx)

Onde o numero 123456789 varia,
o Nome do Individuo tb...
e o IP..

teria como? Eu precis pegar essas informacoes :) :)

[ ]'s
Obrigado.

[8] Comentário enviado por jean-mask em 12/02/2008 - 02:25h

sim ;)

Assunto: (.*) Post by (.*) \((.*)\)

[9] Comentário enviado por jucaetico em 23/07/2009 - 19:10h

Muito bom seu artigo, me ajudou nos estudos para a prova 101. Abraços

[10] Comentário enviado por fmom em 27/07/2009 - 11:55h

Galera, gostaria de saber se tem como pegar a data dos dois arquivos abaixo através de uma unica expressão regular?

ACC_CTANRAA01_2009072609.gz
ACC_COMPLEMENTO_BSANRAS01_2008011317.gz


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts