Provided by: manpages-es_4.27.0-1_all 

NOMBRE
regex - expresiones regulares POSIX.2
DESCRIPCIÓN
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
"básicas" de POSIX.2). Las ER obsoletas existen como tales por mantener la compatibilidad para algunos
viejos programas; y serán discutidas al final. POSIX.2 deja abiertos algunos aspectos de la sintaxis y
semántica 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 más de una(!) rama no vacía, separadas por '|'. Acepta cualquier cosa que
se corresponda con una de las ramas.
Una rama es una(!) o más de una pieza, concatenadas. Acepta algo que corresponda con la primera, seguida
por algo que corresponda con la segunda, etc.
Una pieza es un átomo posiblemente seguido por un solo(!) '*', '+', '?', o por un límite. Un átomo
seguido por '*' ajusta con una secuencia de 0 o más átomos. Un átomo seguido por '+' ajusta con una
secuencia de 1 o más átomos. Un átomo seguido por '?' ajusta con una secuencia de 0 o 1 átomo.
Un límite 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 podrá ser mayor
que el segundo. Un átomo seguido por un límite conteniendo un solo entero i y sin coma ajusta con una
secuencia de exactamente i átomos. Un átomo seguido por un límite conteniendo un entero i y una coma
ajusta con una secuencia de i o más átomos. Un átomo seguido por un límite conteniendo dos enteros i y j
ajusta con una secuencia de entre i y j átomos (ambos inclusive).
Un átomo es una expresión regular encerrada entre "()" (que coincide con una concordancia para la
expresión regular), un conjunto vacío de "()" (que coincide con la cadena nula)(!), una expresión entre
corchetes (ver más abajo), '.' (que coincide con cualquier carácter individual), '^' (que coincide con la
cadena nula al principio de una línea), '$' (que coincide con la cadena nula al final de una línea), un
'\' seguido de uno de los caracteres "^.[$()|*+?{\" (que coincide con ese carácter tomado como un
carácter ordinario), un '\' seguido de cualquier otro carácter(!) (que coincide con ese carácter tomado
como un carácter ordinario, como si el '\' no había estado presente(!)), o un solo carácter sin otro
significado (que coincida con ese carácter). Un '{' seguido de un carácter distinto de un dígito es un
carácter normal, no el comienzo de un límite(!). Es ilegal finalizar una RE con '\'.
Una expresión con corchetes es una lista de caracteres entre unos "[]". Normalmente ajusta con solo uno
de los caracteres de la lista (pero vea más adelante). Si la lista comienza por '^', ajusta con un solo
carácter (pero vea más adelante) que no pertenezca al resto de la lista. Si hay en la lista dos
caracteres separados por '-', es una abreviación de un rango completo de caracteres entre dos (inclusive)
en la secuencia, por ejemplo "[0-9]" en ASCII ajusta con cualquier dígito decimal. Es ilegal(!) que dos
intervalos compartan un carácter, p. ej: "a-c-e". Los rangos son muy dependientes de la secuencia de
especificación y los programas portables deberían evitar utilizarlos.
Para incluir un ']' literal en la lista, conviértalo en el primer carácter (después de un posible '^').
Para incluir un '-' literal, conviértalo en el primer o último carácter, o en el segundo punto final de
un rango. Para utilizar un '-' literal como el primer punto final de un rango, enciérrelo entre "[." y
".]" para convertirlo en un elemento de ordenación (consulte a continuación). Con la excepción de estos y
algunas combinaciones que utilizan '[' (consulte los párrafos siguientes), todos los demás caracteres
especiales, incluido '\', pierden su significado especial dentro de una expresión entre corchetes.
Dentro de una expresión entre corchetes, un elemento a tratar (un carácter, una secuencia de más de un
carácter que se interpreta como si fuera un solo carácter, o un nombre de secuencia de definición
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 expresión con corchetes. Una expresión con corchetes que
contenga un elemento de más de un carácter puede ajustar por más de un carácter, 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 expresión 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,
incluyéndose a él mismo. (Si no hay ningún 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 sinónimos. Una clase de
equivalencia no(!) puede ser el extremo de un intervalo.
Dentro de una expresión 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 estándar son:
alnum digit punct
alpha graph space
blank lower upper
cntrl print xdigit
Están compuestos por las clases de caracteres definidos en wctype(3). Localmente podrán proveerse de
otras. Una clase de caracteres no puede formar parte de un rango.
En el caso en que una ER puede ajustar con más 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 más larga. Las subexpresiones también ajustan con las subcadenas más
largas posibles, sujetas a la restricción de que el ajuste global sea el más largo posible, con
subexpresiones que empiecen antes en la ER con mayor prioridad que aquellas que comiencen después. Nótese
que las subexpresiones de nivel más 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 vacía se considera
más 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 subexpresión se ajusta con los tres caracteres, y cuando "(a*)*" se
intenta ajustar con "bc" tanto la ER como la subexpresión entre paréntesis se ajustan a la cadena vacía.
Si se ha especificado un ajuste no dependiente de las mayúsculas, el efecto es como si todas las
distinciones entre mayúsculas y minúsculas hubieran desaparecido del alfabeto. Cuando un término del
alfabeto existe tanto en mayúsculas como en minúsculas aparece como un carácter ordinario fuera de una
expresión con corchetes, se transforma en una expresión con corchetes conteniendo los dos casos, por
ejemplo, 'x' se convierte en "[xX]". Cuando aparece dentro de una expresión con corchetes, todos los
casos posibles son añadidos a la expresión con corchetes, de tal manera que (por ejemplo) "[x]" se
convierte en "[xX]" y "[^x]" se convierte en "[^xX]".
No se impone ningún límite en particular en la longitud de las ER(!). Los programas que deban ser
portables no deben emplear ER más largas de 256 bytes, ya que una implementación puede rechazar el
aceptar estas ER y seguir cumpliendo POSIX.
Las expresiones regulares obsoletas 'básicas' difieren en varios aspectos. '|', '+' y '?' son caracteres
ordinarios y no existe un equivalente para su funcionalidad. Los delimitadores para los límites son '\{'
y '\}', con '{' y '}' por sí mismos como caracteres ordinarios. Los paréntesis para las subexpresiones
anidadas son '\(' y '\)', con '(' y ')' por sí mismos como caracteres ordinarios. '^' es un carácter
ordinario excepto al principio de la RE o(!) al principio de una subexpresión entre paréntesis, '$' es un
carácter ordinario excepto al final de la RE o(!) al final de una subexpresión entre paréntesis, y '*' es
un carácter ordinario si aparece al principio de la RE o al principio de una subexpresión entre
paréntesis (después de una posible '^' inicial).
Finalmente, hay un nuevo tipo de átomo, una referencia inversa: '\' seguido de un dígito decimal distinto
de cero d coincide con la misma secuencia de caracteres coincidentes con la désima subexpresión entre
paréntesis (numerando las subexpresiones por las posiciones de sus paréntesis de apertura, de izquierda a
derecha), por lo que que, por ejemplo, "\([bc]\)\1" coincide con "bb" o "cc" pero no con "bc".
ERRORES
Tener dos tipos de ER es molesto.
La especificación actual de POSIX.2 dice que un ')' es un carácter ordinario en ausencia de un '(' sin
ajustar; este fue un resultado no intencionado de un error de redacción, y es probable que sea
modificado. Evite usarlo.
Las referencias inversas son un error terrible que plantea problemas importantes para implementaciones
eficientes. También están definidas de forma un tanto ambigua ( ¿'a\(\(b\)*\2\)*d' coincide con
'abbbd'?). Evite usarlas.
La especificación POSIX.2 sobre el ajuste independiente de mayúsculas es muy vaga. La definición
"mayúsculas o minúsculas implican al otro" (N. del T. "one case implies all cases") dada arriba es un
consenso entre todos los implementadores como la buena interpretación.
AUTOR
Esta página ha sido obtenida del paquete regex de Henry Spencer.
VÉASE TAMBIÉN
grep(1), regex(3)
POSIX.2, sección 2.8 (Regular Expression Notation).
TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Juan José López Mellado
<laveneno@hotmail.com> y Marcos Fouces <marcos@debian.org>
Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con
respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a
debian-l10n-spanish@lists.debian.org.
Páginas de Manual de Linux 6.9.1 15 Junio 2024 regex(7)