pb traitement chaine de caractères

Eléphanteau du PHP | 35 Messages

16 mai 2009, 15:59

bonjour
j'ai une chaine de caractère qui est comme ceci

darkgreen/Sarah DURAN tomato/Guillaume DUPONT darkgreen/Raynald DUCHNOK tomato/Nathalie TIRUDE darkgreen/Jean D'ORMESSON darkgreen/Benjamin FERNE

elle est issu d'un script qui donne une couleur à chaque nom sous cette forme
"couleur/prénom NOM"
ainsi
Sarah DURAN est darkgreen
Guillaume DUPONT est tomato
Raynald DUCHNOK est darkgreen
Nathalie TIRUDE est tomato

etc etc

ce script n'est malheureusement n'est pas modifiable(ou très peu)

mon pb est le suivant
je souhaiterais trouver la couleur correspondant au nom
exemple je prends Jean D'ORMESSON et je voudrais que le script me dise darkgreen

je mouline un peu ...mes tenatives avec explode se sont ratatinéees
merci à l'âme noble et généreuse qui se penchera sur mon pb
bye
lolo

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 mai 2009, 16:30

Ta chaine est effectivement un peu trop complexe pour pouvoir utiliser explode() directement... il te faudrait passer par une expression régulière pour identifier les chaines "couleur/prénom nom" à partir desquelles tu pourras ensuite plus facilement extrêre la couleur en fonction du nom. Par exemple :
preg_match_all("#(.*)/(.* [^ ]*) #U", $taChaine, $match);
te donnera un tableau $match contenant ces chaines dans $match[0], mais également toutes les couleurs indexées dans $match[1] et les noms dans $match[2]. Reste plus qu'à manipuler le tableau pour retrouver les infos qu'il te faut...

J'ai fait une expression assez basique : n'importe quels caractères (la couleur), un "/", n'importe quels caractères (le prénom), suivi d'un espace, n'importe quels caractères jusqu'au prochain espace (le nom), suivi d'un espace.
Il faudra sans doute l'améliorer si tu as des noms avec des espaces (particule, etc.)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 35 Messages

16 mai 2009, 20:10

merci ryle

désolé mais ça marche pas
voici le code que j'ai testé
<?

$texte="darkgreen/Sarah DURAN tomato/Guillaume DUPONT darkgreen/Raynald DUCHNOK tomato/Nathalie TIRUDE darkgreen/Jean D'ORMESSON darkgreen/Benjamin FERNE ";



preg_match_all("#(.*)/(.* [^ ]*) #U", $texte, $match); 
echo $match[1];

echo "<br>";



?>

et ça m'affiche
Array qd je lance la page
et idem si je mets echo $match[0]; ou echo $match[2];



merci encore

[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Mammouth du PHP | 991 Messages

16 mai 2009, 20:15

Quand tu vois ceci , essaye print_r() au lieu de echo ca te permet d'afficher le contenu du tableau

cela te permettra d'adapter le tout

Bye Hawk
DevOps, Symfony4, Hoa

Eléphant du PHP | 170 Messages

16 mai 2009, 22:03

Bonsoir,
<?php

$texte="darkgreen/Sarah DURAN tomato/Guillaume DUPONT darkgreen/Raynald DUCHNOK tomato/Nathalie TIRUDE darkgreen/Jean D'ORMESSON darkgreen/Benjamin FERNE ";

$nom="Jean D'ORMESSON";

preg_match("#(\w+)/$nom#",$texte,$couleur);

echo $couleur[1];

?>
:arrow: http://lumadis.be/regex/tuto_pcre.php

Eléphanteau du PHP | 35 Messages

16 mai 2009, 23:05

merci beaucoup blof
je vais étudier ta regex de près
mais ça m'a l'air effectivement assez malin d'utiliser les noms qui sont connus car déjà dans une variable


:lol: :lol: