Provided by: manpages-es_1.55-10_all bug

NOMBRE

       regex - expresiones regulares POSIX 1003.2

DESCRIPCI'ON

       Las  expresiones  regulares  (``ER''s),  tal y como se definen en POSIX
       1003.2, tienen dos formas: ERs modernas (tal  y  como  egrep;  llama  a
       estas ERs ``extendidas'' de 1003.2) y ERs obsoletas (las que usa ed(1);
       son ERs ``basicas'' de 1003.2).

       Las ERs obsoletas existen como tales  por  mantener  la  compatibilidad
       para algunos viejos programas; y seran discutidas al final.

       1003.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 1003.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  l'imite.   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  l'imite  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 expresi'on 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 ese  caracter  tenido  como  un  caracter
       normal),  un  `\'  seguido  por  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 `{' seguido por un caracter diferente
       de un digito es un caracter ordinario, no el principio de un limite.(!)
       Es ilegal terminar una ER con `\'.

       Una expresi'on 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  rangos  compartan  un caracter, por
       ejemplo `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  `[o^]'  son  todos  sinonimos.  Una clase de
       equivalencia no(!) puede formar parte de un rango.

       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.

       Hay   dos   casos  especiales(!)  de  expresiones  con  corchetes:  las
       expresiones con corchetes `[[:<:]]' y `[[:>:]]' ajustan con  la  cadena
       vacia  del  principio  y  final  de  una palabra, respectivamente.  Una
       palabra se define como una secuencia de caracteres de palabra que no se
       encuentra  ni  precedida  ni  seguida  por  caracteres  de palabra.  Un
       caracter de palabra es un caracter de la clase alnum  (tal  y  como  se
       define  en  wctype(3))  o  un  caracter  de  subrayado.   Esta  es  una
       extension, compatible pero no especificada por POSIX 1003.2, y debe ser
       usada  con  cuidado  en  aquel  software  que deba ser portable a otros
       sistemas.

       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  ERs(!).
       Los  programas  que deban ser portables no deben emplear ERs mas largas
       de 256 bytes, ya que una implementacion puede rechazar el aceptar estas
       ERs 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 `(' y
       `)' 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  atr'as:
       `\'  seguido por un d'igito 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'.

V'EASE TAMBI'EN

       regex(3)

       POSIX 1003.2, seccion 2.8 (Regular Expression Notation).

FALLOS

       Tener dos tipos de ERs es molesto.

       La  especificacion  actual  de  1003.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 (c `a\(\(b\)*\2\)*d'  ajusta  con  `abbbd'?).
       Evite usarlo.

       La especificacion 1003.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.

       La sintaxis para limites de palabras es increiblemente desagradable.

AUTOR

       Esta pagina ha sido obtenida del paquete regex de Henry Spencer.

                                7 febrero 1994                        REGEX(7)