Pular para o conteúdo

Usando regex com linguagem 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....
Andre Luiz da Silva andrack
Hits: 17.935 Categoria: C/C++ Subcategoria: Expressões Regulares
  • Download
  • Nova versão
  • Indicar
  • Denunciar

Descrição

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....
Download regex_sample.c Enviar nova versão

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);
}

Função split em C

Gauss Seidel

Automato Finito Determinístico

Verificação do número de CPF

Qual a idade de Jacinto?

#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

Entre na sua conta para comentar.