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 dentro de "()" (ajustandose con una aparicion de la expresion regular), un conjunto vacio de "()" (ajustando con una cadena vacia)(!), una expresion con corchetes (ver abajo), '.' (ajustandose con un solo caracter), '^' (ajustando con la cadena vacia al principio de una linea), '$' (ajustando con la cadena vacia al final de una linea), un '\' seguido por uno de los caracteres "^.[$()|*+?{\" (ajustando con es caracter tenido como un caracter normal), un '\' seguido de otro caracter(!) (ajustando con ese caracter tenido como un caracter ordinario, como si el '\' no estuviera presente(!)), o un solo caracter sin ningun otro significado adicional (ajustando con ese caracter). Un A '{' seguido de un caracter diferente de un digito es un caracter ordinario, no el principio de un limite.(!) Es ilegal terminar una ER con '\'. Una expresion con corchetes es una lista de caracteres entre unos "[]". Normalmente ajusta con solo uno de los caracteres de la lista (pero vea mas adelante). Si la lista comienza por '^', ajusta con un solo caracter (pero vea mas adelante) que no pertenezca al resto de la lista. Si hay en la lista dos caracteres separados por '-', es una abreviacion de un rango completo de caracteres entre dos (inclusive) en la secuencia, por ejemplo "[0-9]" en ASCII ajusta con cualquier digito decimal. Es ilegal(!) que dos intervalos compartan un caracter, p. ej: "a-c-e". Los rangos son muy dependientes de la secuencia de especificacion y los programas portables deberian evitar utilizarlos. Para incluir un literal '' en la lista, debe aparecer el primero en la misma (siguiendo a un posible '^'). Para incluir un literal '-'), debe aparecer el primero o el ultimo en la lista, o ser el segundo caracter de un rango. Para usar un literal '-') como el primer caracter de un rango, debe rodearse entre "[." y ".]" para hacerlo un elemento a tratar (vea mas abajo). Con la excepcion de estas y algunas combinaciones que usan '[' (vea los siguientes parrafos), todos los otros caracteres especiales, incluyendo '\', pierden su significado especial dentro de una expresion entre corchetes. Dentro de una expresion entre corchetes, un elemento a tratar (un caracter, una secuencia de mas de un caracter que se interpreta como si fuera un solo caracter, o un nombre de secuencia de definicion incluido entre "[." y ".]" se entiende como la secuencia de caracteres de ese elemento. La secuencia es un elemento aislado de la lista contenida en la expresion con corchetes. Una expresion con corchetes que contenga un elemento de mas de un caracter puede ajustar por mas de un caracter, por ejemplo si la secuencia incluye un elemento "ch", entonces la ER "[[.ch.]]*c" ajusta con los primeros cinco caracteres de "chchcc". Dentro de una expresion con corchetes, un elemento englobado entre "[=" y "=]" es una clase de equivalencia, comprendiendo las secuencias de caracteres de todos los elementos equivalentes a ese otro, incluyendose a el mismo. (Si no hay ningun otro elemento equivalente, el tratamiento es como si los delimitadores hubieran sido "[." y ".]".) Por ejemplo, si o y ^ son miembros de una clase de equivalencia, entonces, entonces "[[=o=]]", "[[='=]]" y "[oo']" son todos sinonimos. Una clase de equivalencia no(!) puede ser el extremo de un intervalo. Dentro de una expresion con corchetes, el nombre de una clase de caracteres englobado entre "[:" y ":]" se interpreta como la lista de todos los caracteres que pertenecen a esa clase. Los nombre de clase de caracteres estandar 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 los ajustes son medidas en caracteres, no en elementos. Una cadena vacia se considera mas larga que cualquier otro ajuste. Por ejemplo, "bb*" se ajusta con los tres caracteres del centro de "abbbc", "(wee|week)(knights|nights)" se ajusta con los diez caracteres de "weeknights" , cuando "(.*).*" se intenta ajustar con "abc" la subexpresion se ajusta con los tres caracteres, y cuando "(a*)*" se intenta ajustar con "bc" tanto la ER como la subexpresion entre parentesis se ajustan a la cadena vacia. Si se ha especificado un ajuste no dependiente de las mayusculas, el efecto es como si todas las distinciones entre mayusculas y minusculas hubieran desaparecido del alfabeto. Cuando un termino del alfabeto existe tanto en mayusculas como en minusculas aparece como un caracter ordinario fuera de una expresion con corchetes, se transforma en una expresion con corchetes conteniendo los dos casos, por ejemplo, 'x' se convierte en "[xX]". Cuando aparece dentro de una expresion con corchetes, todos los casos posibles son anadidos a la expresion con corchetes, de tal manera 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 ("basic") difieren en varios aspectos. '|', '+' y '?' son caracteres ordinarios y no existe el equivalente para sus funcionalidades. Los delimitadores para los limites son "\{" y "\}", con '{' y '}' como caracteres ordinarios. Los parentesis para subexpresiones anidadas son "\(" y "\)", siendo '(' and ')' caracteres ordinarios. '^' es un caracter ordinario excepto en el principio de la ER o(!) al principio de una subexpresion con parentesis, '$' es un caracter ordinario excepto al final de la ER o(!) al final de una subexpresion con parentesis, y '*' es un caracter ordinario si aparece al principio de la ER o al principio de una subexpresion con parentesis (despues de un posible '^') inicial). Finalmente, existe un nuevo tipo de atomo, la referencia hacia atras: '\' seguido por un digito decimal mayor que cero d ajusta con la misma secuencia de caracteres ajustada por la subexpresion con parentesis d-esima (numerando las subexpresiones por las posiciones de sus parentesis de apertura, y de izquierda a derecha), de tal manera que (por ejemplo) "\([bc]\)\1" ajusta 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 referencias hacia atras son una espantosa 'chapuza', anadiendo bastantes problemas para una implementacion eficiente. Tambien hay cosas vagamente definidas (? "a\(\(b\)*\2\)*d" ajusta con "abbbd"?). Evite usarlo. 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.06 1 Noviembre 2023 regex(7)