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.
Uma pergunta: No artigo anterior vimos que o - denomina
intervalo, mas se eu quiser colocar um - literal dentro da
lista, como faço? Ou se desejar colocar um ]? E ai magrão,
o que fazemos?
Por serem caracteres especiais dentro da lista, o - e o ]
tem lugares reservados para eles.
O ], para ser usado literalmente, deve ser o primeiro da lista
[].:,] entendeu? Assim a lista vai saber que o 1° ]
é literal.
Tá tudo bem e o "-"?
Simples, basta colocá-lo no final da lista. Simples assim??? Exatamente,
expressões regulares foram feitas para facilitar a sua vida e não
dificultá-la, como muitos pensam. Será que esses pensam?
Mais uma coisa antes de prosseguir... [A-z], pelo amor de DEUS
(se é que ele existe...), não me façam uma coisa dessas, pois
lembre-se, ERs seguem a tabela ASCII (me nego a explicar isso de novo!)
e para fazer intervalos entre maiúsculas e minúsculas utilize a
seguinte lista: [A-Za-z] que não tem galho.
E Lembre-se, DENTRO DA LISTA TODO MUNDO É NORMAL, tudo se TORNA
literal exceto você já sabe o que: (^,-,] de acordo com a ordem.
Agora vamos para as novidades desse artigo:
Por entrar no assunto da lista, vamos adiantar um conteúdo que não
tem nada a ver com metacaracteres representantes, mas tem tudo a ver
com a lista:
A classe POSIX
A classe posix foi desenvolvida para localidades que o alfabeto
seja acentuado, pois sabemos que a ç Ãã não ficam no intervalo
de a-z na tabela ASCII e isso os gringos demoraram para
entender, mas a solução foi muito boa. Surgiu daí a classe POSIX,
que representa TODO o ALFABETO da localidade que o SISTEMA estiver
CONFIGURADO. Então lembre-se, se você utilizar uma classe posix e o
sistema estiver em Inglês, o alfabeto não levará em conta caracteres
acentuados.
Vamos as benditas classes posix:
class 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
Muito boa, aposto que por essa nem você esperava!
Agora você deve estar com medo do que vem pela frente, mas se
acalme, pois a lista é o único metacaracter que é cheia de frescuras.
Ela tem quase vida independente.
[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 danielgianni 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 danielgianni 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 humano10 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?