Expressões Regulares (POSIX) em C

Neste artigo veremos o quão simplório é trabalhar com expressões regulares em C.

[ Hits: 25.589 ]

Por: André em 18/10/2011 | Blog: http://127.0.0.1


O primeiro contato



A linguagem C, em seu padrão, possui o scanf, que é o mais próximo que a Linguagem C, em si, chega de expressões regulares. Um exemplo seria ignorar determinados caracteres, ao ler o buffer do teclado.

Usaremos, como eu apresentei anteriormente, o ^, para ignorar. Para uma leitura simples, fazemos algo como:

/* input1.c */
#include <stdio.h>

int main(){
   char name[20];
   printf("What is your name? ");
   scanf("%s",&name);
   printf("%s\n",name);
  
   return 0;
}

Para compilarmos e executarmos:

gcc input1.c
$ ./a.out


Saída:

What is your name? Andre123
Andre123


Como vocês podem observar, eu fiz uma leitura simples, sem fazer quaisquer tipo de filtragem. Observem também que eu inseri números ao meu nome. Pois bem, vamos agora ignorar números na leitura, visto que não queremos que o usuário digite números. Faríamos algo como:

/* input2.c */
#include <stdio.h>

int main(){
   char name[20];
   printf("What is your name? ");
   scanf("%[^0-9]s",&name);
   printf("%s\n",name);
  
   return 0;
}

Para compilar e executar:

gcc input2.c
$ ./a.out


Saída:

What is your name? Andre123
Andre


Como vocês podem ver, na entrada (input) eu inseri números junto ao meu nome mas, ao fazer a leitura do buffer enviado pelo teclado, os números de 1 a 9 foram ignorados, como sugerimos no scanf.

Agora que tivemos o nosso primeiro contato com as tão citadas expressões regulares, não podemos deixar de conhecer o arquivo cabeçalho regex.h. Na próxima página, poderemos, sem demasiados problemas, trabalhar com o este.

O Elgio Schlemer escreveu um artigo extremamente interessante sobre o assunto, e que eu não poderia deixar de referenciar. Sugiro a leitura, será bastante esclarecedora:
Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. O primeiro contato
   3. O arquivo regex.h
Outros artigos deste autor

Pentesting on PHP apps: XSS

Programando em Perl (parte 2)

Trabalhando com classes e métodos em Java (parte 2)

Computação Forense - Entendendo uma perícia

Introdução ao Fortran (parte 1)

Leitura recomendada

Guia de Programação em C/GTK 2 - Construindo uma Calculadora Completa

Instalando Facebook Folly através do Conan

Programação Segura

Criando um sistema operacional com ASM e C++

Criando programas com suporte a arquivos de configuração com a libConfuse

  
Comentários
[1] Comentário enviado por andrezc em 18/10/2011 - 13:58h

Só um pequeno adendo:
Não sei por que motivo, mas onde está o caractere '®', deveria estar ®.



Vou ver se entro em contato com o Fábio, para corrigir.

[2] Comentário enviado por levi linux em 18/10/2011 - 14:10h

Excelente artigo, muito interessante.
Ia justamente perguntar como inserir esse símbolo.
Parabéns!

[3] Comentário enviado por WhiteHawk em 19/10/2011 - 07:04h

Parabéns! Gostei muito desse artigo.

Tive apenas uma dúvida, sobre a expressão regular em si, e não sobre a programação.

Qual a função da seguinte expressão regular? [email protected]+\\.[a-z]+

[4] Comentário enviado por _m4n14c_2 em 20/10/2011 - 03:54h

A expressão regula [email protected]+\.[a-z]+ significa o seguinte:

.+ => . quer dizer que a expressão pega qualquer caracter, + quer dizer que o . deve pegar ao menos 1 caracter, mas podem ser mais de um, até infinitos...
@ => corresponde ao caracter @ do email
.+ => a mesma coisa que o primeiro .+
\. => a barra invertida modifica o caracter .,que normalmente representa qualquer caracter, para corresponder apenas a um ponto literal. Em C a barra invertida é usada para escapar outros caracteres, como \n,\t, \", por isso quando queremos colocar uma barra invertida, em c,temos que usar \\;
[a-z] corresponde a qualquercaracter entre 'a' e 'z'. O + significa que o [a-z] pode pegar um ou mais caracteres.

[5] Comentário enviado por WhiteHawk em 03/01/2012 - 08:44h

@m4n14c, agradeço-lhe pela resposta.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts