IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages de programmation Discussion :

Créer une couche de lisibilité humaine par dessus les expressions régulières


Sujet :

Langages de programmation

  1. #1
    Invité de passage
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2025
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2025
    Messages : 134
    Par défaut Créer une couche de lisibilité humaine par dessus les expressions régulières
    Bonjour.

    J'ai eu l'idée d'une amélioration des expressions régulières utilisées en programmation, et je cherche si elle existait déjà.

    Nulle intention de remettre en question les expressions régulières, qui se sont instaurées en tant que standard, mais sont complexes, encore plus pour le débutant et surtout source d'erreurs du fait de leur faible lisibilité dans le cadre d'un travail en équipe.

    Mon idée :

    Décrire ce que l'on souhaite "matcher" dans un langage intelligible humain dans un langage dédié et conçu pour cela.
    Ensuite, un logiciel prend la demande en entrée, et génère en sortie l'expression régulière, logiciel qui pourra être agrémenté d'option pour définir des constantes selon tel ou tel langage.

    Vous me direz que cela n'a pas d'intérêt maintenant avec l'IA, car on exprime son besoin à l'IA, l'IA génère, ou prend une expression régulière existante et la modifie selon vos désirs, même plus besoin d'apprendre la syntaxe des expressions régulières.

    Mais malgré tout, la syntaxe de l'expression régulière demeure peu lisible, un peu comme du code assembleur comparé à du langage impératif, où bien qu'en commentant beaucoup on puisse faire une erreur. Il y a les tests unitaires pour parer à ces mégardes me direz-vous.

    Néanmoins, je reste déterminé sur l'intérêt de cette idée, qui est tout à fait intégrable en tant que code source dédié, automatisable dans un makefile ou autre, afin d'avoir une définition intelligible de ce qui est matché, et le respect du standard des expressions régulières en sortie.

    Alors, avant de me lancer dans le développement, j'ai cherché si cela existait déjà. Oui.

    Il y a "Human2Regex" https://human2regex.com/tutorial.html qui correspond le mieux à cette idée. Seul regret : le langage dans lequel il est concu, écrit en C/C++ aurait assuré une meilleure portabilité.

    Il existe d'autres projets, mais beaucoup moins "human" : https://github.com/crdoconnor/simex et https://dottxt-ai.github.io/outlines...ity/regex_dsl/

    En espérant que ce partage vous sera utile.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 554
    Par défaut
    Merci pour ce partage, en effet.

    Pour le reste, il serait bon de rappeler avant tout que les expressions régulières ne sont pas un langage de markup choisi arbitrairement mais bien un formalisme mathématique. L'étoile de Kleene, par exemple, est un astérisque qui se place normalement en exposant : « e* » et qui signifie rapidement ici « n'importe quel exposant » (dans les entiers naturels), si bien qu'il est équivalent à « e0 ∪ e1 ∪ e2 ∪ e3 ∪ … » jusqu'à l'infini.

    Le produit cartésien de deux ensemble consistant à associer chaque élément du premier ensemble avec successivement tous les éléments du second, élever un alphabet au carré (donc le multiplier par lui-même) permet de produire tous les mots de longueur 2 exactement. Et conséquemment, l'étoile ci-dessus désigne les mots produits à partir de l'ensemble de toutes les longueurs possibles, y compris nulle.

    De même, il est démontré qu'une expression régulière qui contient des parenthèses reste une expression régulière (contrairement au langage qu'elle reconnait et qui, s'il contient des parenthèses correctement agencées, devient algébrique et passe du type 3 au type 2). Les parenthèses dans une expression ne servent donc pas qu'à définir des sous-groupes.

    Dès lors, réécrire ce formalisme dans un langage « naturel » comme le fait SQL peut être une bonne idée, à condition que ce langage lui reste pleinement fidèle et qu'il garantisse l'accès à toutes les combinaisons possibles, le tout en restant aux langages réguliers (pas question de remonter jusqu'à la machine de Turing par accident). Il faut aussi voir à ne pas faire ce que fait Laravel, par exemple : fournir des API qui permettent de construire du SQL dans le désordre. C'est coller un langage humain au dessus d'un autre langage déjà humain et cela ne fait prendre que des mauvaises habitudes.

    Enfin, avant de s'investir dans sa conception et son développement, il faudra voir s'il est vraiment utile à long terme ou s'il n'est pas plus facile, en définitive, d'apprendre correctement les expressions régulières dans l'intervalle car si elles sont confuses de prime abord, leur syntaxe n'est pas très étendue non plus.

  3. #3
    Invité de passage
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Septembre 2025
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2025
    Messages : 134
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Dès lors, réécrire ce formalisme dans un langage « naturel » comme le fait SQL peut être une bonne idée, à condition que ce langage lui reste pleinement fidèle et qu'il garantisse l'accès à toutes les combinaisons possibles,
    Cela était parfaitement dans mon esprit lorsque j'ai réfléchi à cette idée.
    Le fait que cela ait été déjà développé ne m'a pas fait pousser l'analyse de l'idée jusqu'à sa conclusion, d'autant plus que je n'ai pas utilisé toutes les possibilités du regex.
    Reprendre la documentation des regex était prévue dans la poursuite de l'ébauche.
    Néanmoins, si cela ne couvre pas toutes les possibilités, j'en reste néanmoins convaincu de l'utilité en terme de lisibilité du travail en cas de travail de groupe, raison de ce sujet de discussion pour partager cela et recueillir les critiques ; et, tel je ne précisais, ne se voulait pas à remplacer les regex fort répendues dont certaines subtilités qui ne pourraient être réalisées autrement demeureraient toujours possible via la syntaxe regex.

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/03/2020, 23h56
  2. [WD16] Passer du texte par dessus les colonnes d'une table
    Par Jiybee dans le forum WinDev
    Réponses: 14
    Dernier message: 31/08/2011, 01h01
  3. Un composant par dessus les autres
    Par visiwi dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 15/09/2008, 12h08
  4. Afficher une JFrame "Chargement en cours.." par dessus une autre JFrame ?
    Par Icefire dans le forum Agents de placement/Fenêtres
    Réponses: 3
    Dernier message: 22/02/2008, 23h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo