Expresiones Regulares en C
- Expresiones regulares en C
- 
          
            Construya una expresión regular utilizando el método regcomp()en C
- 
          
            Compare cadenas con una expresión regular compilada utilizando el método regexec()en C
 
Las expresiones regulares en C serán el tema de discusión en este artículo, junto con un ejemplo.
Expresiones regulares en C
Las expresiones regulares, que consisten en una cadena de caracteres, se pueden usar para descubrir patrones de búsqueda. La coincidencia de cadenas y otras aplicaciones similares hacen un uso extensivo de ella.
Son un enfoque estandarizado para hacer coincidir secuencias de patrones con secuencias de caracteres. C, C++, Java y muchos otros lenguajes de programación importantes lo utilizan.
Después de aprender acerca de las expresiones regulares, veamos algunos patrones de biblioteca específicos de POSIX.
- Encontrar las letras o números encerrados entre corchetes es fácil usando [].
- [:number:]se puede utilizar para localizar cualquier número.
- [:word:]puede buscar letras, dígitos y guiones bajos.
- [:lower:]se utiliza para localizar las letras minúsculas del alfabeto.
Construya una expresión regular utilizando el método regcomp() en C
El método de expresión regular regcomp() se utiliza para compilar o construir expresiones regulares. Requiere la expresión regular, la expresión y la bandera.
La expresión es un tipo de cadena, regex es una referencia a una región de memoria donde la expresión se compara y se guarda, y la bandera se usa para identificar el tipo de compilación.
Devolverá el valor 0 si la compilación se ha completado sin errores. Y generará un código de error si la expresión no se puede compilar correctamente.
Sintaxis:
regcomp(®ex, expression, flag)
Ejemplo:
- 
Cree una variable del tipo regex y asígnele un nombre como lo hicimosr1.regex_t r1;
- 
Ahora, debe crear una variable que contenga el resultado del proceso de generación de expresiones regulares, como puede ver a continuación:int regval;
- 
Genere una expresión regular llamando a la función:regval = regcomp(&r1, "[:word:]", 0);
- 
Regular Expression compiled successfully.se mostrará después del proceso de compilación.if (value == 0) { printf("Regular Expression compiled successfully."); }
- 
De lo contrario, arrojará una excepción con el mensajeAn Error Occurred..else { printf("An Error Occurred."); }
Código fuente completo:
#include <regex.h>
#include <stdio.h>
int main() {
  regex_t r1;
  int regval;
  regval = regcomp(&r1, "[:word:]", 0);
  if (regval == 0) {
    printf("Regular Expression compiled successfully.");
  } else {
    printf("An Error Occurred.");
  }
  return 0;
}
Producción :
Regular Expression compiled successfully.
Compare cadenas con una expresión regular compilada utilizando el método regexec() en C
Es posible comparar una cadena con un patrón utilizando la función regexec(). Considera algunos parámetros: el primero es un patrón que ha sido precompilado, una cadena que contiene el patrón a buscar, información sobre la ubicación de las coincidencias y banderas que describen un cambio en el comportamiento de las coincidencias.
Sintaxis:
regexec(®ex, expression, 0, NULL, 0);
Si hay coincidencia, esto devolverá el valor 0. Y si no hay coincidencia, devolverá REG NOMATCH.
Ejemplo:
- 
Para comenzar, crearemos una función llamadaDisplayPatternque mostrará el resultado. Si el valor es 0, mostraráPattern found.; si no es igual a 0, simplemente mostraráPattern not found.; de lo contrario, mostrará un mensaje de error con el mensajeAn error occurred..void DisplayPattern(int val) { if (val == 0) { printf("Pattern found.\n"); } else if (val == REG_NOMATCH) { printf("Pattern not found.\n"); } else { printf("An error occurred.\n"); } }
- 
Ahora, crearemos la funciónMaindonde crearemos una variable de tiporegex_tllamadar1.regex_t r1;
- 
Cree tres variables para el tipo de devolución denominadodata1,data2,data3.int data1; int data2; int data3;
- 
Luego, crea un regEx y compara el patrón con la cadena enreg.data1 = regcomp(&r1, " I am a writing c language", 0); data1 = regexec(&r1, "Hi there its me Zeeshan", 0, NULL, 0);
- 
Agregue algunos regEx más como se muestra a continuación y compare el patrón con la cadena enreg.data2 = regcomp(&r1, "I am a writing c language", 0); data2 = regexec(&r1, " Lets do coding", 0, NULL, 0); data3 = regcomp(&r1, "My Name is Zeeshan Khan", 0); data3 = regexec(&r1, " My Name is Zeeshan Khan", 0, NULL, 0);
- 
Por último, muestra los patrones usando la funciónDisplayPatternque creamos antes.DisplayPattern(data1); DisplayPattern(data2); DisplayPattern(data3);
Código fuente completo:
#include <regex.h>
#include <stdio.h>
void DisplayPattern(int val) {
  if (val == 0) {
    printf("Pattern found.\n");
  } else if (val == REG_NOMATCH) {
    printf("Pattern not found.\n");
  } else {
    printf("An error occurred.\n");
  }
}
int main() {
  regex_t r1;
  int data1;
  int data2;
  int data3;
  data1 = regcomp(&r1, " I am a writing c language", 0);
  data1 = regexec(&r1, "Hi there its me Zeeshan", 0, NULL, 0);
  data2 = regcomp(&r1, "I am a writing c language", 0);
  data2 = regexec(&r1, " Lets do coding", 0, NULL, 0);
  data3 = regcomp(&r1, "My Name is Zeeshan Khan", 0);
  data3 = regexec(&r1, " My Name is Zeeshan Khan", 0, NULL, 0);
  DisplayPattern(data1);
  DisplayPattern(data2);
  DisplayPattern(data3);
  return 0;
}
Producción :
Pattern not found.
Pattern not found.
Pattern found.
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn