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

Langage PHP Discussion :

Liste exhaustive de ce qui "match"


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Développeur Back-End
    Inscrit en
    Août 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2003
    Messages : 138
    Par défaut Liste exhaustive de ce qui "match"
    Bonjour,
    Je recherche un moyen pour, à partir d'une expression régulière, obtenir la liste exhaustives des phrases qui "match" (si celui ci n'est pas infini bien sûr).

    Par exemple, à partir d'une expression du type :
    a(b|c)d
    Je voudrais obtenir un tableau : ['abd','acd']
    Et à partir de l'expression :
    a(b|c)d|e
    Je voudrais obtenir un tableau : ['abd','acd','e']

    Avez vous une idée de comment obtenir ça ?

    A la base, je voudrais faire un outil qui demande une réponse textuelle et qui vérifie si la réponse est juste par rapport à différentes formulations possible. J'avais d'abord listé les réponses dans un tableau et je me suis rendu compte qu'une expression régulière était plus simple.

    Mais je voudrais pouvoir afficher "toutes les réponses possibles".

    Merci pour votre aide,

    Axel

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    En d'autres termes, tu veux faire un genre de rétro-ingénierie de la regex ? et de façon automatique, je suppose.
    Une recherche sur Internet me donne des fonctions/classes/librairies écrites par des gens comme ReverseRegex et GitHub - gajus/paggern: Pattern interpreter for generating random strings..
    Donc a priori, c'est faisable, mais ça a l'air d'être compliqué.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Salut !

    D'un côté, je me dis ça :
    A quoi ça servira ?
    A générer des chaînes à tester pour vérifier si une regex est correcte ?
    Si c'est ça, je trouve que c'est un peu tautologique."Proposition complexe qui reste vraie en vertu de sa forme seule, quelle que soit la valeur de vérité des propositions qui la composent"

    De l'autre, je trouve la problématique très amusante.
    Alors j'ai commencé ce truc non testé et qui ne prend que tes exemples avec ET et OU...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    $string='a(b|c)d(e|f)';
    /*
    BUT produire un tableau du type
    0=>a
    1=>sous tableau b,c
    2=>d
    3=>sous tableau e,f
    */
    //on supprime d'abord toutes les parenthèses
    $string=str_replace('(','',$string);
    $string=str_replace(')','',$string);
    $tableau=array();
    $index=0;
    //$string devient'ab|cde|f';
    //1er tour : on retient tous les "ou" ET leur position
    for($i=0;$i<strlen($string);$i++){
    	if($string[$i]=='|'){
    		$sous_tableau[0]=$string[$i-1];
    		$sous_tableau[1]=$string[$i+1];
    		$index=$index-2;
    		$tableau[$index]=$sous_tableau;
    	}
    	$index++;
    }
    /*
    Normalement tableau devient
    1=>sous tableau b,c
    3=>sous tableau e,f
    *
    //2nd tour : on bouche les trous avec le reste
    //a tester et a finir...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre confirmé
    Profil pro
    Développeur Back-End
    Inscrit en
    Août 2003
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Août 2003
    Messages : 138
    Par défaut
    Merci beaucoup Celira, ça me semble pas mal du tout (même si je ne suis pas sûr que ça me fasse une liste exhaustive).

    Dendrite : ton code a l'air bien, et avant de passer aux expressions régulières, j'utilisais un système simple de propositions séparés par des | mais quand j'ai voulu ajouté les parenthèses, ça me semblait trop complexe à gérer.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- tu n'as toujours pas expliqué à quoi ça pouvait servir.
    As-tu un exemple CONCRET à donner, dans un contexte précis ? (pas juste des abcd...)

    2-
    Citation Envoyé par axel584 Voir le message
    ...je voudrais faire un outil qui demande une réponse textuelle et qui vérifie si la réponse est juste par rapport à différentes formulations possible...
    C'est le principe même d'une regex !
    Mais alors, PAS BESOIN de "lister" toutes les possibilités : il faut juste vérifier que la chaine fournie "match".

    On n'a pas besoin d'une liste exhaustive de toutes les solutions possibles !

  6. #6
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Un problème pour les fortiches du forum ? je sais qu'il y en a beaucoup ! Des problèmes... et des fortiches !
    Moi je tourne en rond...
    Je suis parvenue à passer de ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string='a (b|c) d (e|f) g h i (j|k|l) m';
    A ca... Bon cool.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	Array
    	(
    		[0] => a
    		[1] => Array
    			(
    				[0] => b
    				[1] => c
    			)
     
    		[2] => d
    		[3] => Array
    			(
    				[0] => e
    				[1] => f
    			)
     
    		[4] => g
    		[5] => h
    		[6] => i
    		[7] => Array
    			(
    				[0] => j
    				[1] => k
    				[2] => l
    			)
     
    		[8] => m
    	)
    après je croyais que ce serait un jeu d'enfants de passer de ce tableau aux n possibilités de distribution d'un tableau matches...
    Et là, SURPRISE ! Je ne vois pas comment distribuer pour trouver les n matches !
    Je suis fatiguée ou quoi ?
    Et surtout, il me manque quoi pour la distribution ? J'ai essayé une boucle à l'envers, qui concatène en commençant par la fin, me disant intuitivement que ça sera rapprochait plus de ma logique.
    Mais non ! Ce n'est pas le fond du problème ! Je pense aux variables dynamiques... Bref, je ne sais plus avancer...
    Ou faudrait-il que je revois ma façon même de construire le premier tableau associatif ? Ca doit être ça... Mais oui bien sûr ! J'y retourne immédiatement !
    Les 9 tableaux doivent être imbriqués et distribués dès le départ.
    C'est parfois merveilleux de se dire que ce que je peux faire empiriquement avec ma petite tête très facilement, je ne vois pas facilement comment le modéliser ! Ca m'étonnera toujours.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Invité
    Invité(e)
    Par défaut
    OK...

    Il ne faut pas oublier qu'il faut partir d'une regex valide...

Discussions similaires

  1. supprimer une table qui a des quotes dans son nom
    Par kleenex dans le forum Access
    Réponses: 2
    Dernier message: 17/10/2005, 16h03

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