Provided by: manpages-es_4.19.0-7_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 línea), '$' (ajustando  con  la  cadena
       vacía  al  final  de  una  línea), 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, 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 ("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).

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
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.