Provided by: manpages-es_4.13-4_all bug

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
       y como egrep; 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 dentro de "()" (ajustándose con una aparición de la expresión regular),
       un  conjunto  vacío de "()" (ajustando con una cadena vacía)(!), una expresión con corchetes (ver abajo),
       '.' (ajustándose con un solo carácter), '^' (ajustando con la cadena vacía al principio  de  una  linea),
       '$'  (ajustando  con  la  cadena  vacía  al final de una linea), un '\' seguido por uno de los caracteres
       "^.[$()|*+?{\" (ajustando con es carácter tenido como  un  carácter  normal),  un  '\'  seguido  de  otro
       carácter(!)  (ajustando  con  ese carácter tenido como un carácter ordinario, como si el '\' no estuviera
       presente(!)), o un solo carácter sin ningún otro significado adicional (ajustando con ese carácter). Un A
       '{' seguido de un carácter diferente de un dígito es  un  carácter  ordinario,  no  el  principio  de  un
       límite.(!) Es ilegal terminar una ER 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, debe aparecer el primero en la misma  (siguiendo  a  un  posible
       '^').  Para  incluir  un literal '-'), debe aparecer el primero o el último en la lista, o ser el segundo
       carácter de un rango. Para usar un literal '-') como el primer carácter de un rango, debe rodearse  entre
       "[."  y  ".]"  para  hacerlo  un  elemento  a tratar (vea más abajo). Con la excepción de estas y algunas
       combinaciones que usan '['  (vea  los  siguientes  párrafos),  todos  los  otros  caracteres  especiales,
       incluyendo '\', 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 "[[=o=]]", "[[=o^=]]" y "[oo^]" son todos sinónimos. Una clase de equivalencia no(!)
       puede formar parte 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 ("basic") difieren en varios aspectos.  '|', '+' y '?' son caracteres
       ordinarios y no existe el equivalente para sus funcionalidades. Los delimitadores para  los  límites  son
       "\{"  y  "\}",  con '{' y '}' como caracteres ordinarios. Los paréntesis para subexpresiones anidadas son
       "\(" y "\)", siendo '(' and ')' caracteres ordinarios.  '^'  es  un  carácter  ordinario  excepto  en  el
       principio  de  la  ER  o(!) al principio de una subexpresión con paréntesis, '$' es un carácter ordinario
       excepto al final de la ER o(!) al final de  una  subexpresión  con  paréntesis,  y  '*'  es  un  carácter
       ordinario  si aparece al principio de la ER o al principio de una subexpresión con paréntesis (después de
       un posible '^') inicial).

       Finalmente, existe un nuevo tipo de átomo, la referencia hacia atrás: '\' seguido por un  dígito  decimal
       mayor  que cero d ajusta con la misma secuencia de caracteres ajustada por la subexpresión con paréntesis
       d-ésima (numerando las subexpresiones por las posiciones de sus paréntesis 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  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  hacia  atrás  son  una  espantosa  'chapuza',  añadiendo  bastantes  problemas para una
       implementación  eficiente.  También  hay  cosas  vagamente  definidas  (¿  "a\(\(b\)*\2\)*d"  ajusta  con
       "abbbd"?). Evite usarlo.

       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).

COLOFÓN

       Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una descripción del
       proyecto,   información   sobre   cómo   informar   errores  y  la  última  versión  de  esta  página  en
       https://www.kernel.org/doc/man-pages/.

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.

                                                 13 Agosto 2020                                         REGEX(7)