Introducción

Los rudimentos de las expresiones regulares pueden encontrarse en los trabajos pioneros de McCullogh y Pitts (1940) sobre redes neuronales. El lógico Stephen Kleene definió formalmente el algebra que denominó conjuntos regulares y desarrollo una notación para la descripción de dichos conjuntos, las expresiones regulares.

Durante las décadas de 1960 y 1970 hubo un desarrollo formal de las expresiones regulares. Una de las priemras publicaciones que utilizan las expresiones regulares en un marco informático es el artículo de 1968 de Ken Thompson Regular Expression Search Algorithm en el que describe un compilador de expresiones regulares que produce código objeto para un IBM 7094. Este compilador dió lugar al editor qed, en el cual se basó el editor de Unix ed. Aunque las expresiones regulares de este último no eran tan sofisticadas como las de qed, fueron las primeras en ser utilizadas en un contexto no académico. Se dice que el comando global g en su formato g/re/p que utilizaba para imprimir (opción p) las líneas que casan con la expresión regular re dió lugar a un programa separado al que se denomino grep.

Las expresiones regulares facilitadas por las primeras versiones de estas herramientas eran limitadas. Por ejemplo, se disponía del cierre de Kleene * pero no del cierre positivo + o del operador opcional ?. Por eso, posteriormente, se han introducido los metacaracteres \+ y \?. Existían numerosas limitaciones en dichas versiones, por ej. $ sólo significa ``final de línea'' al final de la expresión regular. Eso dificulta expresiones como

grep 'cierre$\|^Las' viq.tex
Sin embargo, la mayor parte de las versiones actuales resuelven correctamente estos problemas:
nereida:~/viq> grep 'cierre$\|^Las' viq.tex
Las expresiones regulares facilitadas por las primeras versiones de estas herramientas
eran limitadas. Por ejemplo, se disponía del cierre de Kleene \verb|*| pero no del cierre
nereida:~/viq>
De hecho AT&T Bell labs añadió numerosas funcionalidades, como por ejemplo, el uso de \{min, max\}, tomada de lex. Por esa época, Alfred Aho escribió egrep que, no sólo proporciona un conjunto mas rico de operadores sino que mejoró la implementación. Mientras que el grep de Ken Thompson usaba un autómata finito no determinista (NFA), la versión de egrep de Aho usa un autómata finito determinista (DFA).

En 1986 Henry Spencer desarrolló la librería regex para el lenguaje C, que proporciona un conjunto consistente de funciones que permiten el manejo de expresiones regulares. Esta librería ha contribuido a ``homogeneizar'' la sintáxis y semántica de las diferentes herramientas que utilizan expresiones regulares (como awk, lex, sed, ...).

Véase También



Subsecciones
Casiano Rodríguez León
2009-12-09