User avatar by pello in January 1, 1970, 1:00 am
Un ejemplo de uso de la libreria de regex de glibc, que trae herramientas basicas para las expresiones regulares.
/**
* regexp.c
* ejemplo ultrabasico de uso libreria de expresiones regulares de glibc
*
* Se debe incluir la cabecera regex.h
* No se comparan dos strings, se debe "crear" un regex_t con la funcion regcomp
* y luego ya comparamos
*
* (c) Pello Xabier Altadill Izura - www.pello.info
*/

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

// Programa principal.
// acepta dos argumentos: una expresion regular y un string para matchear.
int main(int argc, char *argv[]){

  // este el regexp que se debe iniciar
  regex_t expresion;
  int count;


  if (argc != 3) {
        printf("Uso: %s expresion texto 
",argv[0]);
        exit(1);
  }

  printf("Hola, tus argumentos han sido: ./%s %s %s

", argv[0],argv[1],argv[2]);

  // CREACION de la expresion
  // regcomp(&resultado, string-de-expresion, flag)
  // los flag: REG_EXTENDED :expresiones extendidas POSIX
  //           REG_ICASE :case insensitive
  //           REG_NOSUB : se pasa de parametros nmatch y pmatch
  //           REG_NEWLINE : en operadores globales -*,+,^ pasar del salto de linea
  if(regcomp(&expresion, argv[1] , 0) != 0){
    perror("ERROR GORDO! al crear expresion regular.");
    printf("vamos vamos que nos vamos
");
    exit(1);
  }

    // USO de la expresion
    // regexec(®ex, string-a-comparar, nmatch, pmatch, flags)
   if(regexec(&expresion, argv[2], 0, NULL, 0) == 0) {
      printf("%s <=> %s MATCH!!
",argv[1],argv[2]);
   } else {
      printf("%s <=> %s ? NO HAY MATCH 
",argv[1],argv[2]);
   }

  // Liberamos la memoria okupada por la expresion. autogestion ante todo
  regfree(&expresion);

  return 0;
}

1 comments |  PELMAlink |  1920 reads
0 of 0
make a comment
Comments
#1  user avatar Cloaked Anonymous says:
Buen ejemplo, pero ¿y si...?
Si quiero guardar ciertos componentes de la expresión, como se hace en Perl agrupando con paréntesis y usando las variables $1, $2, etc., puedo con estas funciones?
+-0 of 0
in January 1, 1970, 1:01 am
Show all fields