.\" -*- coding: UTF-8 -*- .ie t .ds dg \(dg .el .ds dg (!) '\" t .\" Copyright, the authors of the Linux man-pages project .\" .\" %%%LICENSE_START(MISC) .\" This software is not subject to any license of the American Telephone .\" and Telegraph Company or of the Regents of the University of California. .\" .\" Permission is granted to anyone to use this software for any purpose .\" on any computer system, and to alter it and redistribute it, subject .\" to the following restrictions: .\" .\" 1. The author is not responsible for the consequences of use of this .\" software, no matter how awful, even if they arise from flaws in it. .\" .\" 2. The origin of this software must not be misrepresented, either by .\" explicit claim or by omission. Since few users ever read sources, .\" credits must appear in the documentation. .\" .\" 3. Altered versions must be plainly marked as such, and must not be .\" misrepresented as being the original software. Since few users .\" ever read sources, credits must appear in the documentation. .\" .\" 4. This notice may not be removed or altered. .\" %%%LICENSE_END .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH regex 7 "17 Mayo 2025" "Páginas de Manual de Linux 6.15" .SH NOMBRE regex \- expresiones regulares POSIX.2 .SH DESCRIPCIÓN Las expresiones regulares ("ER"s), tal y como se definen en POSIX.2, tienen dos formas: ER modernas (tal como \fBegrep\fP(1); llama a estas ER "extendidas" de POSIX.2) y ER obsoletas (las que usa \fBed\fP(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. .P Una ER (moderna) es una \*(dg o más de una\*(dg \fIrama\fP no vacía, separadas por \[aq]|\[aq]. Acepta cualquier cosa que se corresponda con una de las ramas. .P Una rama es una\*(dg o más de una \fIpieza\fP, concatenadas. Acepta algo que corresponda con la primera, seguida por algo que corresponda con la segunda, etc. .P Una pieza es un \fIátomo\fP posiblemente seguido por un solo\*(dg \[aq]*\[aq], \[aq]+\[aq], \[aq]?\[aq], o por un \fIlímite\fP. Un átomo seguido por \[aq]*\[aq] ajusta con una secuencia de 0 o más átomos. Un átomo seguido por \[aq]+\[aq] ajusta con una secuencia de 1 o más átomos. Un átomo seguido por \[aq]?\[aq] ajusta con una secuencia de 0 o 1 átomo. .P Un \fIlímite\fP es un \[aq]{\[aq] seguido por un entero decimal sin signo, posiblemente seguido por una \[aq],\[aq] posiblemente seguida por otro entero decimal sin signo, y todo acabado por un \[aq]}\[aq]. Los enteros deben encontrarse entre 0 y \fBRE_DUP_MAX\fP (255\*(dg) 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 \fIi\fP y sin coma ajusta con una secuencia de exactamente \fIi\fP átomos. Un átomo seguido por un límite conteniendo un entero \fIi\fP y una coma ajusta con una secuencia de \fIi\fP o más átomos. Un átomo seguido por un límite conteniendo dos enteros \fIi\fP y \fIj\fP ajusta con una secuencia de entre \fIi\fP y \fIj\fP átomos (ambos inclusive). .P Un átomo es una expresión regular encerrada entre \[dq]\fI()\fP\[dq] (que coincide con una concordancia para la expresión regular), un conjunto vacío de \[dq]\fI()\fP\[dq] (que concuerda con la cadena nula)\*(dg, una \fIexpresión entre corchetes\fP (ver más adelante), \[aq].\[aq] (que concuerda con cualquier carácter), \[aq]\[ha]\[aq] (que concuerda con la cadena nula al principio de una línea), \[aq]$\[aq] (concuerda con la cadena nula al final de una línea), un \[aq]\[rs]\[aq] seguido de uno de los caracteres \[dq]\fI\[ha].[$()|*+?{\[rs]\fP\[dq] (concuerda con ese carácter tomado como un carácter ordinario), un \[aq]\[rs]\[aq] seguido de cualquier otro carácter\*(dg (concuerda con ese carácter tomado como un carácter ordinario, como si el \[aq]\[rs]\[aq] no hubiera estado presente\*(dg), o un solo carácter sin otro significado (concuerda con ese carácter). Un \[aq]{\[aq] seguido de un carácter que no sea un dígito es un carácter ordinario, no el comienzo de un límite\*(dg. Es incorrecto terminar una RE con \[aq]\[rs]\[aq]. .P Una \fIexpresión entre corchetes\fP es una lista de caracteres encerrados entre \[dq]\fI[]\fP\[dq]. Normalmente concuerda con cualquier carácter de la lista (consulte más adelante). Si la lista comienza Con \[aq]\[ha]\[aq], concuerda con cualquier carácter individual (pero vea más abajo) \fInot\fP del resto de la lista. Si dos caracteres en la lista están separados por \[aq]\-\[aq], esto es una abreviatura para el \fIrango\fP completo de caracteres entre esos dos (inclusive) en la secuencia de cotejo, por ejemplo, \[dq]\fI[0\-9]\fP\[dq] en ASCII concuerda con cualquier dígito decimal. Es incorrecto\*(dg que dos intervalos compartan un punto final, por ejemplo, \[dq]\fIa\-c\-e\fP\[dq]. Los intervalos dependen en gran medida de la secuencia de cotejo, y los programas portables deberían evitar depender de ellos. .P Para incluir el carácter literal \[aq]]\[aq] en la lista, conviértalo en el primer carácter (después de un posible \[aq]\[ha]\[aq]). Para incluir un literal \[aq]\-\[aq], lo convierte en el primer o último carácter, o en el segundo extremo de un intervalo. Para usar un literal \[aq]\-\[aq] como primer extremo de un rango, enciérrelo entre \[dq]\fI[.\fP\[dq] y \[dq]\fI.]\fP\[dq] para convertirlo en un elemento de intercalación (véase más adelante). Con la excepción de estos y algunas combinaciones que utilizan \[aq][\[aq] (véanse los siguientes párrafos), todos los demás caracteres especiales, incluido \[aq]\[rs]\[aq], pierden su significado especial dentro de una expresión entre corchetes. .P Dentro de una expresión entre corchetes, un elemento de intercalación (un carácter, una secuencia de varios caracteres que se intercala como si fuera un solo carácter o el nombre de una secuencia de intercalación para cualquiera de ellos) encerrado entre \[dq]\fI[.\fP\[dq] y \[dq]\fI.]\fP\[dq] representa la secuencia de caracteres de ese elemento de intercalación. La secuencia es un solo elemento de la lista de la expresión entre corchetes. Por lo tanto, una expresión entre corchetes que contenga un elemento de intercalación de varios caracteres puede coincidir con más de un carácter; por ejemplo, si la secuencia de intercalación incluye un elemento de intercalación 'ch', entonces la expresión de equivalencia \[dq]\fI[[.ch.]]*c\fP\[dq] coincide con los primeros cinco caracteres de \&'chchcc'. .P Dentro de una expresión entre corchetes, un elemento de intercalación entre \[dq]\fI[=\fP\[dq] y \[dq]\fI=]\fP\[dq] es una clase de equivalencia que representa las secuencias de caracteres de todos los elementos de intercalación equivalentes a ese, incluido él mismo. (Si no hay otros elementos de intercalación equivalentes, el tratamiento es como si los delimitadores que lo encierran fueran \[dq]\fI[.\fP\[dq] y \[dq]\fI.]\fP\[dq].) Por ejemplo, si o y \(^o son miembros de una clase de equivalencia, entonces \[dq]\fI[[=o=]]\fP\[dq], \[dq]\fI[[=\(^o=]]\fP\[dq] y \[dq]\fI[o\(^o]\fP\[dq] son sinónimos. Una clase de equivalencia no puede\*(dg ser el extremo de un intervalo. .P Dentro de una expresión entre corchetes, el nombre de una \fIclase de caracteres\fP, entre \[dq]\fI[:\fP\[dq] y \[dq]\fI:]\fP\[dq], representa la lista de todos los caracteres que pertenecen a esa clase. Los nombres estándar de clases de caracteres son: .P .RS .TS l l l. alnum digit punct alpha graph space blank lower upper cntrl print xdigit .TE .RE .P .\" As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=295666 .\" The following does not seem to apply in the glibc implementation .\" .P .\" There are two special cases\*(dg of bracket expressions: .\" the bracket expressions .\" .RI \[dq] [[:<:]] \[dq] .\" and .\" .RI \[dq] [[:>:]] \[dq] .\" match the null string at the beginning and end of a word respectively. .\" A word is defined as a sequence of .\" word characters .\" which is neither preceded nor followed by .\" word characters. .\" A word character is an .\" .I alnum .\" character (as defined by .\" .BR wctype (3)) .\" or an underscore. .\" This is an extension, .\" compatible with but not specified by POSIX.2, .\" and should be used with .\" caution in software intended to be portable to other systems. Están compuestos por las clases de caracteres definidos en \fBwctype\fP(3). Localmente podrán proveerse de otras. Una clase de caracteres no puede formar parte de un rango. .P 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. .P Las longitudes de concordancia se miden en caracteres, no en elementos de intercalación. Una cadena nula se considera más larga que cualquier concordancia. Por ejemplo, \[dq]\fIbb*\fP\[dq] concuerda con los tres caracteres del medio de 'abbbc', \[dq]\fI(wee|week)(knights|nights)\fP\[dq] concuerda con los diez caracteres de 'weeknights', cuando \[dq]\fI(.*).*\fP\[dq] se compara con 'abc' la subexpresión entre paréntesis concuerda con los tres caracteres, y cuando \[dq]\fI(a*)*\fP\[dq] se compara con 'bc' tanto el RE completo como la subexpresión entre paréntesis concuerdan con la cadena nula. .P Si se especifica la coincidencia independiente de mayúsculas y minúsculas, el efecto es similar al de eliminar todas las distinciones entre mayúsculas y minúsculas del alfabeto. Cuando un carácter alfabético que existe en múltiples mayúsculas y minúsculas aparece como un carácter ordinario fuera de una expresión entre corchetes, se transforma en una expresión entre corchetes que contiene ambos casos; por ejemplo, \[aq]x\[aq] se convierte en \[dq]\fI[xX]\fP\[dq]. Cuando aparece dentro de una expresión entre corchetes, todas sus contrapartes en mayúsculas y minúsculas se añaden a la expresión entre corchetes, de modo que, por ejemplo, \[dq]\fI[x]\fP\[dq] se convierte en \[dq]\fI[xX]\fP\[dq] y \[dq]\fI[\[ha]x]\fP\[dq] se convierte en \[dq]\fI[\[ha]xX]\fP\[dq]. .P No se impone ningún límite en particular en la longitud de las ER\*(dg. 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. .P Las expresiones regulares obsoletas («básicas») difieren en varios aspectos. \[aq]|\[aq], \[aq]+\[aq] y \[aq]?\[aq] son caracteres comunes y no existe un equivalente funcional. Los delimitadores para los límites son \[dq]\fI\[rs]{\fP\[dq] y \[dq]\fI\[rs]}\fP\[dq], siendo \[aq]{\[aq] y \[aq]}\[aq] por sí mismos caracteres comunes. Los paréntesis para las subexpresiones anidadas son \[dq]\fI\[rs](\fP\[dq] y \[dq]\fI\[rs])\fP\[dq], siendo \[aq](\[aq] y \[aq])\[aq] por sí mismos caracteres comunes. \[aq]\[ha]\[aq] es un carácter ordinario excepto al principio de la RE o\*(dg al principio de una subexpresión entre paréntesis, \[aq]$\[aq] es un carácter ordinario excepto al final de la RE o\*(dg al final de una subexpresión entre paréntesis, y \[aq]*\[aq] 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 \[aq]\[ha]\[aq] inicial). .P Finalmente, hay un nuevo tipo de átomo, la \fIreferencia inversa\fP: \[aq]\[rs]\[aq] seguido de un dígito decimal distinto de cero. \fId\fP coincide con la misma secuencia de caracteres que coincide con la \fId\fPésima subexpresión entre paréntesis (numerando las subexpresiones por las posiciones de sus paréntesis iniciales, de izquierda a derecha), por lo que Que, por ejemplo, \[dq]\fI\[rs]([bc]\[rs])\[rs]1\fP\[dq] concuerda con 'bb' o \&'cc' pero no con 'bc'. .SH ERRORES Tener dos tipos de ER es molesto. .P La especificación actual de POSIX.2 dice que un \[aq])\[aq] es un carácter ordinario en ausencia de un \[aq](\[aq] sin ajustar; este fue un resultado no intencionado de un error de redacción, y es probable que sea modificado. Evite usarlo. .P Las retrorreferencias son una gran chapuza, que plantea importantes problemas para implementaciones eficientes. Además, su definición es algo imprecisa (¿concordará \[dq]\fIa\[rs](\[rs](b\[rs])*\[rs]2\[rs])*d\fP\[dq] con \&'abbbd'?). Evite usarlas. .P .\" As per http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=295666 .\" The following does not seem to apply in the glibc implementation .\" .P .\" The syntax for word boundaries is incredibly ugly. 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" (\fBN. del T.\fP "one case implies all cases") dada arriba es un consenso entre todos los implementadores como la buena interpretación. .SH AUTOR .\" In order to comply with `credits must appear in the documentation' .\" I added an AUTHOR paragraph - aeb. .\" Sigh... The page license means we must have the author's name .\" in the formatted output. Esta página ha sido obtenida del paquete regex de Henry Spencer. .SH "VÉASE TAMBIÉN" \fBgrep\fP(1), \fBregex\fP(3) .P POSIX.2, sección 2.8 (Regular Expression Notation). .PP .SH TRADUCCIÓN La traducción al español de esta página del manual fue creada por Juan José López Mellado y Marcos Fouces . .PP Esta traducción es documentación libre; lea la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD. .PP Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a .MT debian-l10n-spanish@lists.debian.org .ME .