.\" Copyright (C), 1995, Graeme W. Wilford. (Wilf.) .\" .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" .\" Wed Jun 14 16:10:28 BST 1995 Wilf. (G.Wilford@ee.surrey.ac.uk) .\" Tiny change in formatting - aeb, 950812 .\" Modified 8 May 1998 by Joseph S. Myers (jsm28@cam.ac.uk) .\" .\" Translated Thu Oct 15 1998 by Juan Piernas .\" .\" show the synopsis section nicely .de xx .in \\n(INu+\\$1 .ti -\\$1 .. .TH REGCOMP 3 "8 Mayo 1998" GNU "Manual del Programador de Linux" .SH NOMBRE regcomp, regexec, regerror, regfree \- funciones para expresiones regulares POSIX .SH SINOPSIS .B #include .br .B #include .sp .xx \w'\fBint\ regcomp(\fR'u .BI "int\ regcomp(regex_t *" preg ", const char *" regex , .BI "int " cflags ); .xx \w'\fBint\ regexec(\fR'u .BI "int\ regexec(const regex_t *" preg ", const char *" string , .BI "size_t " nmatch ", regmatch_t " pmatch[] , .BI "int " eflags ); .xx \w'\fBsize_t\ regerror(\fR'u .BI "size_t\ regerror(int " errcode , .BI "const regex_t *" preg ", char *" errbuf , .BI "size_t " errbuf_size ); .xx \w'\fBvoid\ regfree(\fR' .BI "void\ regfree(regex_t *" preg ); .SH "COMPILACIÓN DE EXPRESIONES REGULARES POSIX" .B regcomp se utiliza para compilar una expresión regular en un formato apropiado para ser usado por .B regexec en búsquedas posteriores. A .B regcomp se le pasan como parámetros .IR preg , un puntero a un área de almacenamiento temporal de patrones, .IR regex , un puntero a una cadena terminada en un carácter nulo y .IR 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 .B regexec siempre se le debe proporcionar la dirección de un buffer de patrones inicializado mediante .BR regcomp . .I cflags debe ser un .BR O -lógico a nivel de bits de una o más de las siguientes opciones: .TP .B REG_EXTENDED Utilizar el tipo de sintaxis 'Expresión Regular Extendida .BR POSIX ' cuando se interprete .IR regex . Si no se activa esta opción, se utiliza el tipo de sintaxis 'Expresión Regular Básica .BR POSIX '. .TP .B REG_ICASE No distinguir entre mayúsculas y minúsculas. Las siguientes búsquedas .B regexec que usen este buffer de patrones no distinguirán entre mayúsculas y minúsculas. .TP .B REG_NOSUB No se necesita soporte para obtener las posiciones de subcadenas coincidentes. Los parámetros .I nmatch y .I pmatch de .B regexec se ignoran si el buffer de patrones proporcionado se compiló con esta opción. .TP .B REG_NEWLINE Los operadores "coincidir con cualquier carácter" no coinciden con un carácter "nueva línea". Una lista de no-coincidencia .RB ( [^...] ) que no contenga un carácter "nueva línea" no coincidirá con una "nueva línea". Un operador "coincidir al principio de línea" .RB ( ^ ) coincide con la cadena vacía inmediatamente posterior a un carácter "nueva línea", sin tener en cuenta si .IR eflags , la bandera de ejecución de .BR regexec , contiene .B REG_NOTBOL o no. Un operador "coincidir al final de línea" .RB ( $ ) coincide con la cadena vacía inmediatamente anterior a un carácter "nueva línea", sin tener en cuenta si .IR eflags contiene .B REG_NOTEOL o no. .SH "COINCIDENCIAS EN LAS EXPRESIONES REGULARES POSIX" .B regexec se utiliza para comprobar si una cadena .IR string , terminada en un carácter nulo, coincide con alguno de los patrones precompilados del buffer .IR preg . .I nmatch y .I pmatch se utilizan para informar respecto a la localización de cualquier coincidencia. .I eflags puede ser .B REG_NOTBOL o .B REG_NOTEOL o un .BR O -lógico de ambos valores, lo que cambia el comportamiento en las coincidencias tal como se describe a continuación. .TP .B REG_NOTBOL El operador "coincidir al principio de línea" siempre falla en las coincidencias (pero vea la opción de compilación .B REG_NEWLINE más arriba). Esta bandera se puede utilizar cuando se pasan diferentes porciones de una cadena a .B regexec y el comienzo de la cadena no se debe interpretar como el principio de una línea. .TP .B REG_NOTEOL El operador "coincidir al final de línea" siempre falla en la coincidencias (pero vea la opción de compilación .B REG_NEWLINE más arriba). .SS "DESPLAZAMIENTOS DE BYTES" A menos que se especificara .B REG_NOSUB en la compilación del buffer de patrones, es posible obtener información sobre la posición de subcadenas coincidentes. .I pmatch debe tener un tamaño de al menos .I nmatch elementos. Estos se rellenan al ejecutar .BR regexec con las posiciones de cadenas coincidentes. Cualquier elemento de la estructura no utilizado contendrá el valor -1. La estructura .BR regmatch_t , que es el tipo de .IR pmatch , se define en .IR regex.h . .RS .B typedef struct .br .B { .br .BI " regoff_t " rm_so ; .br .BI " regoff_t " rm_eo ; .br .B } .B regmatch_t; .RE Cada elemento .I rm_so que no es -1 indica el principio de la siguiente mayor subcadena coincidente dentro de la cadena. El elemento relativo .I rm_eo indica el final de la coincidencia. .SH "INFORMES DE ERROR POSIX" .B regerror se utiliza para convertir los códigos de error que pueden devolver tanto .B regcomp como .B regexec en cadenas de mensaje de error. A .B regerror se le pasa el código de error, .IR errcode , el buffer de patrones .IR preg , un puntero al buffer de una cadena de caracteres, .IR errbuf , y el tamaño del buffer de la cadena, .IR errbuf_size . Devuelve el tamaño de .I errbuf necesario para contener la cadena con el mensaje de error terminada en un carácter nulo. Si tanto .I errbuf como .I errbuf_size no son cero, .I errbuf se rellena con los primeros .I "errbuf_size - 1" caracteres del mensaje de error y un carácter nulo terminador. .SH "LIBERACIÓN DE BUFFERS DE PATRONES POSIX" Si a .B regfree se le pasa un buffer de patrones precompilados, .IR preg , liberará la memoria del buffer de patrones reservada por el proceso de compilación, .BR regcomp . .SH "VALOR DEVUELTO" .B regcomp devuelve cero si la compilación tiene éxito y un código de error si falla. .B regexec devuelve cero si hay coincidencia y .B REG_NOMATCH en caso de fallo. .SH ERRORES .B regcomp puede devolver los siguientes errores: .TP .B REG_BADRPT Uso incorrecto de operadores de repetición, como el uso de .RB ` * ' como primer carácter. .TP .B REG_BADBR Uso incorrecto del operador de referencia inversa. .TP .B REG_EBRACE Existe una llave de un operador de intervalo no emparejada. .TP .B REG_EBRACK Existe un corchete de un operador de lista no emparejado. .TP .B REG_ERANGE Uso incorrecto de un operador de rango; por ejemplo, el límite superior del rango ocurre antes que el límite inferior. .TP .B REG_ECTYPE Nombre de clase de caracteres desconocido. .TP .B REG_ECOLLATE Elemento de comparación inválido. .TP .B REG_EPAREN Existe un paréntesis de un operador de grupo no emparejado. .TP .B REG_ESUBREG Referencia inversa incorrecta a una subexpresión. .TP .B REG_EEND Error indefinido. No definido por POSIX.2. .TP .B REG_EESCAPE Barra invertida (\\) al final. .TP .B REG_BADPAT Uso incorrecto de operadores de patrón tales como grupo o lista. .TP .B REG_ESIZE La expresión regular compilada necesita un buffer de patrones mayor que 64Kb. No definido por POSIX.2. .TP .B REG_ESPACE Las rutinas de expresiones regulares se ejecutaron fuera de sus límites de memoria. .SH "CONFORME A" POSIX.2 .SH "VÉASE TAMBIÉN" .BR regex (7), .B "El manual de expresiones regulares de GNU"