regex(7) Miscellaneous Information Manual regex(7) NOMBRE regex - expresiones regulares POSIX.2 DESCRIPCION Las expresiones regulares ("ER"s), tal y como se definen en POSIX.2, tienen dos formas: ER modernas (tal como egrep(1); llama a estas ER "extendidas" de POSIX.2) y ER obsoletas (las que usa ed(1); son ER "basicas" de POSIX.2). Las ER obsoletas existen como tales por mantener la compatibilidad para algunos viejos programas; y seran discutidas al final. POSIX.2 deja abiertos algunos aspectos de la sintaxis y semantica de las ER; "(dg" es una de las decisiones tomadas al respecto de estos temas que puede no ser portable con otras implementaciones de la POSIX.2. Una ER (moderna) es una (!) o mas de una(!) rama no vacia, separadas por '|'. Acepta cualquier cosa que se corresponda con una de las ramas. Una rama es una(!) o mas de una pieza, concatenadas. Acepta algo que corresponda con la primera, seguida por algo que corresponda con la segunda, etc. Una pieza es un atomo posiblemente seguido por un solo(!) '*', '+', '?', o por un limite. Un atomo seguido por '*' ajusta con una secuencia de 0 o mas atomos. Un atomo seguido por '+' ajusta con una secuencia de 1 o mas atomos. Un atomo seguido por '?' ajusta con una secuencia de 0 o 1 atomo. Un limite es un '{' seguido por un entero decimal sin signo, posiblemente seguido por una ',' posiblemente seguida por otro entero decimal sin signo, y todo acabado por un '}'. Los enteros deben encontrarse entre 0 y RE_DUP_MAX (255(!)) inclusive, y si hay dos de ellos, el primero no podra ser mayor que el segundo. Un atomo seguido por un limite conteniendo un solo entero i y sin coma ajusta con una secuencia de exactamente i atomos. Un atomo seguido por un limite conteniendo un entero i y una coma ajusta con una secuencia de i o mas atomos. Un atomo seguido por un limite conteniendo dos enteros i y j ajusta con una secuencia de entre i y j atomos (ambos inclusive). Un atomo es una expresion regular encerrada entre "()" (que coincide con una concordancia para la expresion regular), un conjunto vacio de "()" (que concuerda con la cadena nula)(!), una expresion entre corchetes (ver mas adelante), '.' (que concuerda con cualquier caracter), '^' (que concuerda con la cadena nula al principio de una linea), '$' (concuerda con la cadena nula al final de una linea), un '\' seguido de uno de los caracteres "^.[$()|*+?{\" (concuerda con ese caracter tomado como un caracter ordinario), un '\' seguido de cualquier otro caracter(!) (concuerda con ese caracter tomado como un caracter ordinario, como si el '\' no hubiera estado presente(!)), o un solo caracter sin otro significado (concuerda con ese caracter). Un '{' seguido de un caracter que no sea un digito es un caracter ordinario, no el comienzo de un limite(!). Es incorrecto terminar una RE con '\'. Una expresion entre corchetes es una lista de caracteres encerrados entre "[]". Normalmente concuerda con cualquier caracter de la lista (consulte mas adelante). Si la lista comienza Con '^', concuerda con cualquier caracter individual (pero vea mas abajo) not del resto de la lista. Si dos caracteres en la lista estan separados por '-', esto es una abreviatura para el rango completo de caracteres entre esos dos (inclusive) en la secuencia de cotejo, por ejemplo, "[0-9]" en ASCII concuerda con cualquier digito decimal. Es incorrecto(!) que dos intervalos compartan un punto final, por ejemplo, "a-c-e". Los intervalos dependen en gran medida de la secuencia de cotejo, y los programas portables deberian evitar depender de ellos. Para incluir el caracter literal ']' en la lista, conviertalo en el primer caracter (despues de un posible '^'). Para incluir un literal '-', lo convierte en el primer o ultimo caracter, o en el segundo extremo de un intervalo. Para usar un literal '-' como primer extremo de un rango, encierrelo entre "[." y ".]" para convertirlo en un elemento de intercalacion (vease mas adelante). Con la excepcion de estos y algunas combinaciones que utilizan '[' (veanse los siguientes parrafos), todos los demas caracteres especiales, incluido '\', pierden su significado especial dentro de una expresion entre corchetes. Dentro de una expresion entre corchetes, un elemento de intercalacion (un caracter, una secuencia de varios caracteres que se intercala como si fuera un solo caracter o el nombre de una secuencia de intercalacion para cualquiera de ellos) encerrado entre "[." y ".]" representa la secuencia de caracteres de ese elemento de intercalacion. La secuencia es un solo elemento de la lista de la expresion entre corchetes. Por lo tanto, una expresion entre corchetes que contenga un elemento de intercalacion de varios caracteres puede coincidir con mas de un caracter; por ejemplo, si la secuencia de intercalacion incluye un elemento de intercalacion 'ch', entonces la expresion de equivalencia "[[.ch.]]*c" coincide con los primeros cinco caracteres de 'chchcc'. Dentro de una expresion entre corchetes, un elemento de intercalacion entre "[=" y "=]" es una clase de equivalencia que representa las secuencias de caracteres de todos los elementos de intercalacion equivalentes a ese, incluido el mismo. (Si no hay otros elementos de intercalacion equivalentes, el tratamiento es como si los delimitadores que lo encierran fueran "[." y ".]".) Por ejemplo, si o y o son miembros de una clase de equivalencia, entonces "[[=o=]]", "[[=o=]]" y "[oo]" son sinonimos. Una clase de equivalencia no puede(!) ser el extremo de un intervalo. Dentro de una expresion entre corchetes, el nombre de una clase de caracteres, entre "[:" y ":]", representa la lista de todos los caracteres que pertenecen a esa clase. Los nombres estandar de clases de caracteres son: alnum digit punct alpha graph space blank lower upper cntrl print xdigit Estan compuestos por las clases de caracteres definidos en wctype(3). Localmente podran proveerse de otras. Una clase de caracteres no puede formar parte de un rango. En el caso en que una ER puede ajustar con mas de una subcadena de la cadena dada, la ER se ajusta con aquella que comience antes en la cadena dada. Si la ER puede ajustar con varias subcadenas que comienzan en el mismo punto, se ajusta con la mas larga. Las subexpresiones tambien ajustan con las subcadenas mas largas posibles, sujetas a la restriccion de que el ajuste global sea el mas largo posible, con subexpresiones que empiecen antes en la ER con mayor prioridad que aquellas que comiencen despues. Notese que las subexpresiones de nivel mas alto tienen prioridad respecto a sus subexpresiones componentes de nivel inferior. Las longitudes de concordancia se miden en caracteres, no en elementos de intercalacion. Una cadena nula se considera mas larga que cualquier concordancia. Por ejemplo, "bb*" concuerda con los tres caracteres del medio de 'abbbc', "(wee|week)(knights|nights)" concuerda con los diez caracteres de 'weeknights', cuando "(.*).*" se compara con 'abc' la subexpresion entre parentesis concuerda con los tres caracteres, y cuando "(a*)*" se compara con 'bc' tanto el RE completo como la subexpresion entre parentesis concuerdan con la cadena nula. Si se especifica la coincidencia independiente de mayusculas y minusculas, el efecto es similar al de eliminar todas las distinciones entre mayusculas y minusculas del alfabeto. Cuando un caracter alfabetico que existe en multiples mayusculas y minusculas aparece como un caracter ordinario fuera de una expresion entre corchetes, se transforma en una expresion entre corchetes que contiene ambos casos; por ejemplo, 'x' se convierte en "[xX]". Cuando aparece dentro de una expresion entre corchetes, todas sus contrapartes en mayusculas y minusculas se anaden a la expresion entre corchetes, de modo que, por ejemplo, "[x]" se convierte en "[xX]" y "[^x]" se convierte en "[^xX]". No se impone ningun limite en particular en la longitud de las ER(!). Los programas que deban ser portables no deben emplear ER mas largas de 256 bytes, ya que una implementacion puede rechazar el aceptar estas ER y seguir cumpliendo POSIX. Las expresiones regulares obsoletas (<>) difieren en varios aspectos. '|', '+' y '?' son caracteres comunes y no existe un equivalente funcional. Los delimitadores para los limites son "\{" y "\}", siendo '{' y '}' por si mismos caracteres comunes. Los parentesis para las subexpresiones anidadas son "\(" y "\)", siendo '(' y ')' por si mismos caracteres comunes. '^' es un caracter ordinario excepto al principio de la RE o(!) al principio de una subexpresion entre parentesis, '$' es un caracter ordinario excepto al final de la RE o(!) al final de una subexpresion entre parentesis, y '*' es un caracter ordinario si aparece al principio de la RE o al principio de una subexpresion entre parentesis (despues de una posible '^' inicial). Finalmente, hay un nuevo tipo de atomo, la referencia inversa: '\' seguido de un digito decimal distinto de cero. d coincide con la misma secuencia de caracteres que coincide con la desima subexpresion entre parentesis (numerando las subexpresiones por las posiciones de sus parentesis iniciales, de izquierda a derecha), por lo que Que, por ejemplo, "\([bc]\)\1" concuerda con 'bb' o 'cc' pero no con 'bc'. ERRORES Tener dos tipos de ER es molesto. La especificacion actual de POSIX.2 dice que un ')' es un caracter ordinario en ausencia de un '(' sin ajustar; este fue un resultado no intencionado de un error de redaccion, y es probable que sea modificado. Evite usarlo. Las retrorreferencias son una gran chapuza, que plantea importantes problemas para implementaciones eficientes. Ademas, su definicion es algo imprecisa (?concordara "a\(\(b\)*\2\)*d" con 'abbbd'?). Evite usarlas. La especificacion POSIX.2 sobre el ajuste independiente de mayusculas es muy vaga. La definicion "mayusculas o minusculas implican al otro" (N. del T. "one case implies all cases") dada arriba es un consenso entre todos los implementadores como la buena interpretacion. AUTOR Esta pagina ha sido obtenida del paquete regex de Henry Spencer. VEASE TAMBIEN grep(1), regex(3) POSIX.2, seccion 2.8 (Regular Expression Notation). TRADUCCION La traduccion al espanol de esta pagina del manual fue creada por Juan Jose Lopez Mellado y Marcos Fouces Esta traduccion es documentacion libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. Si encuentra algun error en la traduccion de esta pagina del manual, envie un correo electronico a . Paginas de Manual de Linux 6.15 17 Mayo 2025 regex(7)