La théorie du langage est liée à la théorie de l'informatique. Il s'agit de l'aspect plus philosophique de l'informatique, qui consiste à décider quels programmes sont possibles, ou seront jamais possibles à écrire, et quel type de problèmes il est impossible d'écrire un algorithme pour les résoudre.
Une expression régulière est une façon de décrire un langage régulier. Un langage régulier est un langage qui peut être déterminé par un automate fini déterministe.
Vous devriez lire l'article sur les machines à états finis : http://en.wikipedia.org/wiki/Finite_state_machine
Et les langues régulières : http://en.wikipedia.org/wiki/Regular_language
Toutes les langues régulières sont des langues sans contexte, mais il existe des langues sans contexte qui ne sont pas régulières. Un langage sans contexte est l'ensemble de toutes les chaînes de caractères acceptées par un grammaire sans contexte ou une automate Pushdown qui est une machine à états finis avec une seule pile : http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages
Il existe des langages plus compliqués qui nécessitent une machine de Turing (tout programme possible que vous pouvez écrire sur votre ordinateur) pour décider si une chaîne de caractères est dans le langage ou non.
La théorie des langages est également très liée au problème P vs. NP, ainsi qu'à d'autres questions intéressantes.
Mon livre d'introduction à l'informatique de troisième année expliquait assez bien ce genre de choses : Introduction à la théorie de l'informatique. Par Michael Sipser. Mais il m'a coûté environ 160 dollars à l'achat et il n'est pas très grand. Peut-être que tu peux trouver un exemplaire d'occasion ou un exemplaire dans une bibliothèque ou quelque chose comme ça, ça pourrait t'aider.
EDIT :
Les limites des expressions régulières et des classes de langage supérieures ont fait l'objet de nombreuses recherches au cours des 50 dernières années environ. Vous pourriez être intéressé par le lemme de pompage pour les langages réguliers. Il s'agit d'un moyen de prouver qu'un certain langage n'est pas régulier :
http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages
Si un langage n'est pas régulier, il peut être sans contexte, ce qui signifie qu'il peut être décrit par une grammaire sans contexte, ou il peut même appartenir à une classe de langage supérieure. Vous pouvez prouver qu'il n'est pas sans contexte à l'aide du lemme de pompage pour les langages sans contexte, qui est similaire à celui des expressions régulières.
Un langage peut même être indécidable, ce qui signifie que même une machine de Turing (programme que votre ordinateur peut exécuter) ne peut être programmée pour décider si une chaîne de caractères doit être acceptée comme faisant partie du langage ou rejetée.
Je pense que la partie qui vous intéresse le plus est la machine à états finis (à la fois déterministe et déterministe) pour voir quels langages une expression régulière peut décider, et le lemme de pompage pour prouver quels langages ne sont pas réguliers.
En fait, une langue n'est pas régulière si elle a besoin d'une certaine forme de mémoire ou de capacité à compter. Le langage des parenthèses correspondantes n'est pas régulier, par exemple, parce que la machine doit se souvenir si elle a ouvert une parenthèse pour savoir si elle doit en fermer une.
Le langage de toutes les chaînes utilisant les lettres a et b et contenant au moins trois b est un langage régulier : a ba ba ba
Le langage de toutes les chaînes utilisant les lettres a et b et contenant plus de b que de a n'est pas régulier.
Il ne faut pas non plus croire que tous les langages finis sont réguliers, par exemple :
Le langage de toutes les chaînes de moins de 50 caractères utilisant les lettres a et b et contenant plus de b que de a est régulier, puisqu'il est fini, nous savons qu'il pourrait être décrit comme (b|abb|bab|bba|aabbb|abb|...) ect jusqu'à ce que toutes les combinaisons possibles soient répertoriées.