REGCOMP(3) | Manual del Programador de Linux | REGCOMP(3) |
regcomp, regexec, regerror, regfree - funciones para expresiones regulares POSIX
#include <sys/types.h>
#include <regex.h>
int regcomp(regex_t *preg, const char
*regex, int cflags);
int regexec(const regex_t *preg, const char
*string, size_t nmatch, regmatch_t
pmatch[], int eflags);
size_t regerror(int errcode, const regex_t
*preg, char *errbuf, size_t
errbuf_size);
void regfree(regex_t *preg);
regcomp se utiliza para compilar una expresión regular en un formato apropiado para ser usado por regexec en búsquedas posteriores.
A regcomp se le pasan como parámetros preg, un puntero a un área de almacenamiento temporal de patrones, regex, un puntero a una cadena terminada en un carácter nulo y cflags, banderas utilizadas para determinar el tipo de compilación.
Toda búsqueda con expresiones regulares se debe realizar mediante un buffer de patrones compilados, por tanto, a regexec siempre se le debe proporcionar la dirección de un buffer de patrones inicializado mediante regcomp.
cflags debe ser un O-lógico a nivel de bits de una o más de las siguientes opciones:
Una lista de no-coincidencia ([^...]) que no contenga un carácter "nueva línea" no coincidirá con una "nueva línea".
Un operador "coincidir al principio de línea" (^) coincide con la cadena vacía inmediatamente posterior a un carácter "nueva línea", sin tener en cuenta si eflags, la bandera de ejecución de regexec, contiene REG_NOTBOL o no.
Un operador "coincidir al final de línea" ($) coincide con la cadena vacía inmediatamente anterior a un carácter "nueva línea", sin tener en cuenta si eflags contiene REG_NOTEOL o no.
regexec se utiliza para comprobar si una cadena string, terminada en un carácter nulo, coincide con alguno de los patrones precompilados del buffer preg. nmatch y pmatch se utilizan para informar respecto a la localización de cualquier coincidencia. eflags puede ser REG_NOTBOL o REG_NOTEOL o un O-lógico de ambos valores, lo que cambia el comportamiento en las coincidencias tal como se describe a continuación.
A menos que se especificara REG_NOSUB en la compilación del buffer de patrones, es posible obtener información sobre la posición de subcadenas coincidentes. pmatch debe tener un tamaño de al menos nmatch elementos. Estos se rellenan al ejecutar regexec con las posiciones de cadenas coincidentes. Cualquier elemento de la estructura no utilizado contendrá el valor -1.
La estructura regmatch_t, que es el tipo de pmatch, se define en regex.h.
Cada elemento rm_so que no es -1 indica el principio de la siguiente mayor subcadena coincidente dentro de la cadena. El elemento relativo rm_eo indica el final de la coincidencia.
regerror se utiliza para convertir los códigos de error que pueden devolver tanto regcomp como regexec en cadenas de mensaje de error.
A regerror se le pasa el código de error, errcode, el buffer de patrones preg, un puntero al buffer de una cadena de caracteres, errbuf, y el tamaño del buffer de la cadena, errbuf_size. Devuelve el tamaño de errbuf necesario para contener la cadena con el mensaje de error terminada en un carácter nulo. Si tanto errbuf como errbuf_size no son cero, errbuf se rellena con los primeros errbuf_size - 1 caracteres del mensaje de error y un carácter nulo terminador.
Si a regfree se le pasa un buffer de patrones precompilados, preg, liberará la memoria del buffer de patrones reservada por el proceso de compilación, regcomp.
regcomp devuelve cero si la compilación tiene éxito y un código de error si falla.
regexec devuelve cero si hay coincidencia y REG_NOMATCH en caso de fallo.
regcomp puede devolver los siguientes errores:
POSIX.2
regex(7), El manual de expresiones regulares de GNU
8 Mayo 1998 | GNU |