joboy84 Posté 31 Mars 2010 Posté 31 Mars 2010 Bonjour, Je souhaite, lors de la soumission d'un formulaire, récupérer uniquement les données du type : onmouseover="Tip('<strong>Ciane Bau<br>Member GV: 205<br>Home Phone:+33200000009280<br>Email: trd974_AT_gail.com<br>Enroller: Dier Herez<br>Enroller GV: 1160<br>Enroller Email: <a href=mailto:djxxm27_AT_yoo.fr>djxxm27_AT_yoo.fr</a><br>Enroller Phone: +3300000528br><br>Click to view more details</strong>', BALLOON, true, ABOVE, true);return false" onmouseout="UnTip()"> J'ai donc pensé aux regex...en disant que les données doivent commencer par : onmouseover="Tip('<strong> et se termine par onmouseout="UnTip()"> <?phpwhile($ok = preg_match("#^onmouseover=\"Tip\(\'\<strong\>([a-zA-Z0-9_-.<>]{1,})onmouseout=\"UnTip\(\)\"\>$#", $data2)) { echo "$ok <br>";; }?> Mais cela renvoie Warning: preg_match() [function.preg-match]: Compilation failed: range out of order in character class at offset 44 svp aidez moi !
jcaron Posté 31 Mars 2010 Posté 31 Mars 2010 Comme "-" désigne une "range" (comme A-Z), "_-." désigne "les caractères dont le code ASCII est compris entre _ et .". Or "." a un code ASCII inférieur à "_", donc ça couine. Et de toutes façons ce n'est pas ce que tu veux. La bonne solution: dans une classe (quelque chose entre []), si tu veux inclure "-", il faut toujours le mettre au début. Tant qu'on y est: - le ^ et le $ impliquent que $data2 commence effectivement par onmouseover et finisse par UnTip()">, je ne suis pas sûr que ce soit effectivement ce que tu veux - "{1,}" peut s'écrire "+", c'est quand même plus simple - si tu utilises ' comme délimiteur pour ta chaîne, tu n'auras pas besoin d'escaper les ", ça fait trois \ de moins, c'est toujours ça de pris en lisibilité - ta classe n'acceptera pas les caractères accentués. Tu peux avoir envie d'utiliser \w à la place de a-zA-Z0-9, c'est plus large. Ou carrément [^']+ pour tout prendre jusqu'au ' qui suit - il te manque des choses avant le onmouseout, ta regex ne matchera jamais Jacques.
joboy84 Posté 1 Avril 2010 Auteur Posté 1 Avril 2010 (modifié) Bonjour Alors j'ai testé en prenant en considération les remarques... J'ai fait : <?php$data2 = 'Code source d une page html'; // extraction de la partie souhaité $pattern = preg_match_all('#id=[0-9]{9}" onmouseover="Tip\(\'<strong>[^\']+#i',$data2,$match2); if ($pattern) { //On liste les résultats foreach($match2[0] as $resultat) { echo "Extraction : ", $resultat, "\n <br>"; } }?> Cela m'extrait bien : id=100000028" onmouseover="Tip('<strong>Ciane Bau<br>Member GV: 205<br>Home Phone:+33200000009280<br>Email: trd974_AT_gail.com<br>Enroller: Dier Herez<br>Enroller GV: 1160<br>Enroller Email: <a href=mailto:djxxm27_AT_yoo.fr>djxxm27_AT_yoo.fr</a><br>Enroller Phone: +3300000528br><br>Click to view more details</strong> Super cool ca marche Sinon, je suis ok pour utiliser le simple quote en tant que délimiteur de chaîne, mais comment faire pour que dans mon texte (code source $data2) cela les échappe automatiquement ? Ensuite, je souhaite récupérer les données correspondant à : id=100000028 (juste les chiffres) Ciane Bau Home Phone:+33200000009280 (juste le numéro) Member GV: 205 (juste les chiffres) Email: trd974_AT_gail.com (juste le mail) Enroller Email: <a href=mailto:djxxm27_AT_yoo.fr (juste le mail) Enroller GV: 1160 (juste le nombre Comment puis je faire cela? Merci Modifié 1 Avril 2010 par joboy84
jcaron Posté 1 Avril 2010 Posté 1 Avril 2010 Ben si le format est fixe: '#id=([0-9]+)" onmouseover="Tip\(\'<strong>([^<]+)<br>Member GV:\s*([0-9]+)<br>Home Phone:([^<]+)etc. Tu récupères ensuite chaque partie entre () dans $match2[1] (l'id), $match[2] (le nom), etc. Il est temps de lire la doc: http://php.net/manual/en/function.preg-match-all.php :-) Jacques.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant