Usando regex com linguagem C

Publicado por Andre Luiz da Silva 29/05/2004

[ Hits: 17.477 ]

Homepage: http://localhost

Download regex_sample.c




Segue ae um pequeno exemplo que eu retirei de um site sobre como se trabalhar com regex em linguagem C, espero que seja util....


Falowz....

  



Esconder código-fonte

#include <stdio.h>
#include <regex.h>

main (argc,argv)

int argc;
char **argv;

{
 char buffer[1024];
 regex_t rx;
 regmatch_t match;
 size_t nmatch = 1;

 if (regcomp(&rx, argv[1], REG_EXTENDED) != 0)
    {
    perror("regcomp");
    return;
    }

 while (!feof(stdin))
    {
    fgets(buffer,1024,stdin);
    
    if (regexec(&rx,buffer,1,&match,0) == 0)
       {
       printf("Matched:(%s) at %d to %d",buffer,match.rm_so,match.rm_eo);
       }

    }

regfree(&rx);
}

Scripts recomendados

Convolução 1D

Validação de emails em C/C++

Verificação do número de CPF

Sequência de Fibonacci

Programa para escola


  

Comentários
[1] Comentário enviado por jose_maria em 31/05/2004 - 16:17h

O que é regex?
valeu.

[2] Comentário enviado por DarkInner7 em 15/06/2004 - 14:20h

Reg = Regular
Exp = Expressions

Expresscoes regulares s"ao artificios usados quando se quer por exemplo, achar em uma saida de ls -l em um diretorio, todos os arquivos que comecem com a letra "d" mas que tenham como terceira letra "e" e terminem de 1 a 9. Regular expressions servem para isso ... capiche ?

[3] Comentário enviado por removido em 12/01/2005 - 12:42h

Interessante...
Nunca havia usado a regexp.h
Valeu a dica...

[4] Comentário enviado por brunnoboni em 07/01/2008 - 17:10h

alguém sabe como faço para ler um arquivo .txt para identificar e retirar apenas os emails contidos nesse arquivo usando o regeX ???...tentei fazer mas não está dando certo então acredito que usando essa função deve funcionar :/

..Alguem pode ajudar?

Bruno Araújo

[5] Comentário enviado por brunnoboni em 08/01/2008 - 16:14h

Fiz em perl mas devo fazer em C... Tenho esse exemplo mas queria testá-lo para pegar emails de contidos em um texto....


/*
* match.c
*
* Este programa simplesmente testa se uma expressão regular casa (match)
* com uma entrada (input).
*
* argv[1] = expressão regular
* argv[2] = input
*
* ex: ./match '^12' '1234567890'
*/

/* headers necessários */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <regex.h>

/* recebe como parâmetro a expressão regular e o input para
* tentar casar */
void er_match(char *argv[])
{
/* aloca espaço para a estrutura do tipo regex_t */
regex_t reg;

/* compila a ER passada em argv[1]
* em caso de erro, a função retorna diferente de zero */
if (regcomp(® , argv[1], REG_EXTENDED|REG_NOSUB|REG_ICASE) != 0) {
fprintf(stderr,"erro regcomp\n");
exit(1);
}
/* tenta casar a ER compilada (®) com a entrada (argv[2])
* se a função regexec retornar 0 casou, caso contrário não */
if ((regexec(®, argv[2], 0, (regmatch_t *)NULL, 0)) == 0)
printf("Casou\n");
else
printf("Não Casou\n");
}

int main(int argc, char **argv)
{
if (argc != 3) {
fprintf(stderr,"Uso: match <ER> <input>\n");
return 1;
}
er_match(argv);
return 0;
}


Soh que não sei como fazer para o argv[2] ser considerado uma constante do padrão de emails para ele comparar com os padrões existentes no arquivo...alguem sabe?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts