Acredito que a maioria dos correspondentes de expressão regular interpretada começa com o algoritmo de construção de Thompson para transformar a expressão regular em um autômato finito não determinístico. O artigo que os descreveu pela primeira vez é: Ken Thompson, "Técnicas de programação: algoritmo de busca por expressão regular", Communications of the ACM , 11 (6): 419-422, junho de 1968. Mas esse trabalho é um pouco difícil de ler, pois ele estava compilando para o código da máquina.
Meu tutorial favorito sobre implementação de expressões regulares é esta série de posts de Russ Cox , autor da biblioteca de expressões regulares RE2. Ele dá muita discussão histórica. Ele argumenta que a abordagem mais eficiente para simular o NFA é converter o DFA em tempo real com o cache apenas dos estados do DFA que você realmente alcança. (Em contraste com, por exemplo, a implementação de expressões regulares no Perl, que usam backtracking.) Há casos (por exemplo, quando você obtém expressões regulares estendidas com referências), em que você precisa usar o backtracking, mas Cox sugere que você deve use o retorno sempre que precisar.
O outro lugar que você pode procurar é a biblioteca de expressões regulares de Henry Spencer . De acordo com esse site, isso foi descrito no livro: Dale Schumacher (ed), Software Solutions In C , Academic Press, 1994.