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

Shell et commandes GNU Discussion :

Détection d'inclusion d'expression régulière


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Par défaut Détection d'inclusion d'expression régulière
    Bonjour à tous

    La formulation du problème est simple...
    • Soit 2 expressions régulières X et Y
    • Existe-t-il un moyen de savoir (de préférence en cmd shell) si X est couverte potentiellement (incluse dans) par Y ?
    • exemple 1 : *ab* est inclus dans ^z*.ab$
    • exemple 2 : *ab* est potentiellemnt inclus dans ^z*.a*b*$


    J'espère avoir été assez clair...

    Merci d'avance de vos réponses

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Bonjour,

    je ne comprends pas bien ta syntaxe.
    Parles-tu d'expressions régulières ou d'expressions génériques (comme dans l'extension de chemin d'accès)?
    La partie gauche *ab* me fait plutôt penser à une expression générique (n'importe quels caractères, suivis d'un et un seul "a", suivi d'un et un seul "b", suivi de n'importe quels caractères), c'est-à-dire l'expression régulière .*ab.*.
    Alors que la partie droite ^z*.ab$ me fait plutôt penser à une expression régulière (début de ligne, suivi du caractère "z" en nombre quelconque (éventuellement nul), suivi d'un et d'un seul caractère quelconque, suivi d'un et un seul "a", suivi d'un et un seul "b", suivi d'une fin de ligne).

    Et, pour reformuler ce que tu appelles inclusion, veux-tu savoir s'il existe un moyen de savoir si toute chaîne matchant Y matche aussi X?

    En tout cas, je serais assez surpris que ça existe!

  3. #3
    Membre confirmé
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Par défaut
    Effectivement, je parle bien d'expression régulière...
    Tu as raison de corriger mon *ab* par .*ab.*.

    Citation Envoyé par jack-ft Voir le message
    Et, pour reformuler ce que tu appelles inclusion, veux-tu savoir s'il existe un moyen de savoir si toute chaîne matchant Y matche aussi X?
    Non, je ne cherche pas à vérifier cette implication systématique.
    Je désire répondre à la question suivante :
    Existe-t-il au moins une chaîne matchant X et Y ?

    Citation Envoyé par jack-ft Voir le message
    En tout cas, je serais assez surpris que ça existe!
    Je partage ton avis... Mais qui tente rien...

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par cquilgars Voir le message
    Non, je ne cherche pas à vérifier cette implication systématique.
    Je désire répondre à la question suivante :
    Existe-t-il au moins une chaîne matchant X et Y ?
    Si tu avais mis OU à la place de ET, la réponse eut été simplement '(X|Y)'.
    Pour un ET, a priori, je ferais un petit pipe: cat | egrep "X" | egrep "Y".
    Attention: ça peut donner des faux positifs si une partie de la ligne matche X et une autre partie matche Y

    Sinon je vois une autre solution qui répond à la question que je reformulerais ainsi:
    Afficher toutes les lignes dont une partie matche à la fois "re1" et "re2":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{ if (match($0, "re1") && match(substr($0, RSTART, RLENGTH), "re2")) { print $0; } }'
    Attention! Il peut y avoir de faux négatifs, si une première partie de la ligne matche re1, mais pas re2 et une seconde partie de la ligne matche re1 et re2

    Attention: si tu veux passer les expressions en argument, il faut utiliser les bons quotes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    re1="..."
    re2="..."
    awk '{ if (match($0, "'$re1'") && match(substr($0, RSTART, RLENGTH), "'$re2'")) { print $0; } }'
    là où il y a de la quote y a pas de plaisir...

    HTH
    )jack(

  5. #5
    Membre confirmé
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Par défaut
    Merci Jack pour ton intérêt à ma cause

    Une précision... Pour se faire, je ne m'appuie pas sur une liste de chaines à tester.

    Je regarde uniquement la liste de mes expressions régulières pour les évaluer entre elles.

    L'objectif final est de déterminer une ordonnancement (le plus adapté) de ces regexp pour un parcours séquentiel de ces dernières de manière à positionner les regexp les plus "génériques" en queue de liste... On désire s'arrêter sur la plus restrictive en 1er...

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    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 486
    Par défaut
    Hello,

    Ce n'est pas facile à dire car tu peux avoir deux expressions régulières différentes qui reconnaissent le même langage. Par exemple, « a*a » et « aa* ».reconnaissent strictement la même chose mais restent deux expressions distinctes. Leurs automates équivalents le sont aussi (l'un boucle sur l'état initial, l'autre sur l'état final).

    Pour pouvoir affirmer que ce sont les mêmes, il faudrait pouvoir vérifier si les deux langages sont mutuellement inclus l'un dans l'autre. L'ennui, c'est que c'est justement ce que tu cherches à faire.

  7. #7
    Membre confirmé
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Hello,

    Ce n'est pas facile à dire car tu peux avoir deux expressions régulières différentes qui reconnaissent le même langage. Par exemple, « a*a » et « aa* ».reconnaissent strictement la même chose mais restent deux expressions distinctes. Leurs automates équivalents le sont aussi (l'un boucle sur l'état initial, l'autre sur l'état final).
    Tu as tout dit

  8. #8
    Membre confirmé
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Par défaut
    Peut-être le paradis içi

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 486
    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 486
    Par défaut
    Citation Envoyé par cquilgars Voir le message
    Peut-être le paradis içi
    En tout cas son antichambre, car il faut modérer cela au vu de ceci :

    False return value does not imply that there's a string matched by the first regexp which isn't matched by the second - many regular expressions (i.e. those containing Perl code) are impossible to compare, and this module doesn't even implement all possible comparisons.

  10. #10
    Membre confirmé
    Homme Profil pro
    Intégrateur
    Inscrit en
    Novembre 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Intégrateur
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2004
    Messages : 139
    Par défaut
    Bonjour Obsidian,



    Citation Envoyé par Obsidian Voir le message
    En tout cas son antichambre, car il faut modérer cela au vu de ceci :


    Effectivement, j'avais vu... Mais cela semble un début de solution (ou du moins d'outillage) en tenant compte de la relative simplicité des regexp que j'utilise...

    Je déclare la problématique comme résolue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 48
    Dernier message: 07/03/2014, 15h49
  2. Expression régulière - Détection de phrase collée
    Par Adams93 dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 04/06/2013, 13h05
  3. Réponses: 4
    Dernier message: 26/06/2008, 18h15
  4. expression régulière pour reconnaitre une inclusion de fichier en c++
    Par cdm1024 dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 27/11/2007, 13h49
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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