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