La réponse à cette question est "c'est impossible". Plus précisément, l'enquêteur se demande si vous avez été attentif dans votre cours de théorie computationnelle.
Dans votre cours de théorie informatique, vous avez appris les machines à états finis. Une machine à états finis est composée de nœuds et d'arêtes. Chaque arête est annotée d'une lettre d'un alphabet fini. Un ou plusieurs nœuds sont des nœuds spéciaux "acceptants" et un nœud est le nœud "de départ". Au fur et à mesure que chaque lettre est lue dans un mot donné, nous traversons l'arête donnée dans la machine. Si nous arrivons dans un état d'acceptation, nous disons que la machine "accepte" ce mot.
Une expression régulière peut toujours être traduite en une machine à états finis équivalente. C'est-à-dire une machine qui accepte et rejette les mêmes mots que l'expression régulière (dans le monde réel, certains langages regexp autorisent des fonctions arbitraires, mais celles-ci ne comptent pas).
Il est impossible de construire une machine à états finis qui accepte tous les palindromes. La preuve repose sur le fait que nous pouvons facilement construire une chaîne qui nécessite un nombre arbitrairement grand de nœuds, à savoir la chaîne
a^x b a^x (par exemple, aba, aabaa, aaabaaa, aaaabaaaa, ....)
où a^x est a répété x fois. Cela nécessite au moins x nœuds car, après avoir vu le "b", nous devons compter x fois en arrière pour nous assurer qu'il s'agit bien d'un palindrome.
Enfin, pour en revenir à la question initiale, vous pourriez dire à votre interlocuteur que vous pouvez écrire une expression régulière qui accepte tous les palindromes dont la taille est inférieure à une longueur fixe finie. S'il existe un jour une application du monde réel nécessitant l'identification de palindromes, il est presque certain qu'elle n'inclura pas les palindromes de longueur arbitraire. Cette réponse montrerait donc que vous pouvez faire la différence entre les impossibilités théoriques et les applications du monde réel. Néanmoins, la regexp réelle serait assez longue, bien plus longue que le programme équivalent de 4 lignes (exercice facile pour le lecteur : écrire un programme qui identifie les palindromes).
1 votes
stackoverflow.com/questions/3644266/ peut donner une idée.
3 votes
De nos jours (2018) et pour ceux qui recherchent "la regex palindrome", voir la discussion sur le support PCRE motifs récursifs au lien de Prakhar, et mon regex récursif ci-dessous, avec des comparaisons .