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 hicimos
r1
.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 mensaje
An 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 llamada
DisplayPattern
que 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ón
Main
donde crearemos una variable de tiporegex_t
llamadar1
.regex_t r1;
-
Cree tres variables para el tipo de devolución denominado
data1
,data2
,data3
.int data1; int data2; int data3;
-
Luego, crea un regEx y compara el patrón con la cadena en
reg
.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 en
reg
.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ón
DisplayPattern
que 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