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.099 ]

Por: rudolf ghysio schaarschmidt em 23/11/2003


Finalizando pendências



Referência: Vamos começar a real diversão.

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:



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.

    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

Visão geral do X-Windows

SCO & Microsoft unidas contra o Linux?

Ambiente X-Window, a continuação

Software livre no país não é mais somente incentivo

Utilizando o Xterm

Leitura recomendada

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

Verificação da sintaxe do e-mail 1.0

Expressões regulares no PHP

Introdução a manipulação de erros em PHP

PHP-GD retorna status do MSN Messenger , Skype e GTalk

  
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

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