Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/03/2011, 17h36   #1
Invité de passage
 
Inscription : mai 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 18
Points : 4
Points : 4
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 :
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 :
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!
iOops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 18h00   #2
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Ton code ne donne pas ce résultat.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 18h24   #3
Invité de passage
 
Inscription : mai 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 18
Points : 4
Points : 4
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 :
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.
iOops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2011, 20h05   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Est-ce que c'est le 1 qui limite la chaine ?
Si oui indique un numérique en fin de schéma
Code :
$pattern='/('.$key.'/)\d';
Il faut evidemment qu'il n'y ait jamais de nombre dans tes clefs.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 11h43   #5
Invité de passage
 
Inscription : mai 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 18
Points : 4
Points : 4
La clé peut contenir à la fin un numérique comme du texte d´une longueur variable.

Code :
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:];
iOops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 11h45   #6
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
Si ta clef peut contenir des chiffres comment sais-tu si

"event_handler_enabled12" correspond à
"event_handler_enabled" 12
ou à
"event_handler_enabled1" 2
?
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 11h57   #7
Invité de passage
 
Inscription : mai 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 18
Points : 4
Points : 4
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.
iOops est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/04/2011, 15h34   #8
Invité de passage
 
Inscription : mai 2006
Messages : 18
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 18
Points : 4
Points : 4
Code :
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.
iOops est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h58.


 
 
 
 
Partenaires

Hébergement Web