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 :

preg_match : recherche d´un mot entier dans une chaine [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 14
    Points
    14
    Par défaut preg_match : recherche d´un mot entier dans une chaine
    Bonjour,

    cela fait quelques heures que je tourne le problème dans tous les sens et je n´y vois plus grand chose ^^.

    Je dispose d´un grand tableau dont voici un résumé :

    1/ array(...., 'event_handler'=>'', 'event_handler_enabled'=>'', ....);

    Je récupère dans un tableau la chaine qui m´intéresse :

    2/ Array([0]=>event_handler_enabled1;Hosteventhandlerisenabled)

    Je souhaite comparer les clés du tableau 1/ avec le 2/. Les données du 2/peuvent changer.

    Dans le tableau 2/ je disopose de la clé que je veux comparer avec 1/ mais aussi de sa valeur. Ici : 1.

    J´ai donc réalisé de code suivant pour contrôler que la clé du tableau 1/ est égale à celle du 2/ :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $pattern='/\bevent_handler_enabled\b/';
    // $strtmp[0] = event_handler_enabled1;Hosteventhandlerisenabled
    preg_match_all($pattern, $strtmp[0], $matches);
    Ce code ne me donne pas de résultat.

    Le code ci-dessous me donne le résultat suivant :

    Array ( [0] => Array ( [0] => event_handler ) )
    Array ( [0] => Array ( [0] => event_handler_enabled ) )

    Ce qui est logique puisque "event_handler_enabled" contient "event_handler". Or je souhaite qu´il n´y ai qu´un seul résultat à savoir "event_handler_enabled".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $pattern='/event_handler_enabled/';
    // $strtmp[0] = event_handler_enabled1;Hosteventhandlerisenabled
    preg_match_all($pattern, $strtmp[0], $matches);
    Je vous remercie pour votre aide!

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton code ne donne pas ce résultat.

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 14
    Points
    14
    Par défaut
    Je me suis peut etre mal exprimé.

    Hypothèses :

    Tableau_A : ('event_handler'=>'', 'event_handler_enabled'=>'');
    Tableau_B : (event_handler_enabled1;Hosteventhandlerisenabled, 'xxxxx')

    Voici le code un peut plus complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    //$tableau_a=array([event_handler]=>'', [event_handler_enabled]=>'')
    //$tableau_b=array([0]=>event_handler_enabled1Hosteventhandlerisenabled, [1]=>xxxxx)
     
    foreach (array_keys($tableau_a) as $key) {
     
    $pattern='/'.$key.'/';
    preg_match_all($pattern, $tableau_b[0], $matches);
     
    print_r($matches);
     
    }
    Comment puis je adapter ma variable $pattern pour qu´elle ne recherche que le mot entier dans la chaine de $tableau_b[0] ? Dois je prendre la chaine du tableau_b comme une sous-chîne ?

    J´ai aussi essayé avec l´expression $pattern='/\b'.$key.'\b/'; mais cela ne m´affiche pas de résultat.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Est-ce que c'est le 1 qui limite la chaine ?
    Si oui indique un numérique en fin de schéma
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern='/('.$key.'/)\d';
    Il faut evidemment qu'il n'y ait jamais de nombre dans tes clefs.

  5. #5
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 14
    Points
    14
    Par défaut
    La clé peut contenir à la fin un numérique comme du texte d´une longueur variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $pattern='/('.$key.'/)\d';
    $a = $strtmp[0];
    if(preg_match($pattern, $a))
         echo $a;
    Le résultat est que la variable $a n´est jamais affichée. Or je dispose bien de la clé. J´ai également essayé avec preg_match_all et aussi avec un autre pattern comme : $pattern='/('.$key.'/)\[:alnum:];

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si ta clef peut contenir des chiffres comment sais-tu si

    "event_handler_enabled12" correspond à
    "event_handler_enabled" 12
    ou à
    "event_handler_enabled1" 2
    ?

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 14
    Points
    14
    Par défaut
    C´est un peut difficile en effet.

    En fait je dispose dans un tableau, on va dire le tableau A de l´ensemble des clés dont j´ai besoin. Ces clés ne changeront jamais car justement elles devront être associées à une valeur, valeur que je souhaite récupérer du tableau_b. Le tableau_b contient à l´indice 0, une variable qui est formée de la facon suivante : <clé du tableau A><valeur><commentaie>. La variable ne contient pas d´espace.

    Je souhaite donc comparer ma clé du tableau_a avec la variable du tableau_b pour récupérer la valeur et l´associer à la bonne clé du tableau_a.

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 48
    Points : 14
    Points
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    foreach (array_keys($hostopts) as $key) {
       $pattern='/\b'.$key.'\b/i';
       preg_match($pattern, $strtmp, $sk);
       if(array_key_exists($sk[0], $hostopts)){
          $t = preg_split($pattern, $strtmp); 
          $value=$t[1];
          if($hostopts[$key]!==$value)
             $hostopts[$key]=$value;
       }
    }
    Le code ci-dessus résound mon problème.

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 06/09/2012, 11h30
  2. Recherche de mot commençant par une chaine dans un dictionnaire
    Par ram-0000 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 20/04/2012, 19h09
  3. [RegExp] recherche d'un mot précis dans une chaine
    Par oceane751 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/04/2012, 12h23
  4. Recherche d'entier dans une chaine de caractere
    Par padawan78 dans le forum Langage
    Réponses: 2
    Dernier message: 22/03/2010, 21h45
  5. Réponses: 10
    Dernier message: 10/10/2005, 21h46

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