Provided by:
manpages-es_1.55-10_all 
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)