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.931 Categoria: C/C++ Subcategoria: Expressões Regulares
  • Download
  • Nova versão
  • Indicar
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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);
}
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Convolução 1D

Formatar strings em C (RG, telefone, CEP etc)

Calcula uma PA...

Sequincia em Fibonacci no C++

[C] Equação do 2° Grau

#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.