Bonjour tout le monde !
Voilà je galère depuis pas mal de jours maintenant pour parvenir à analyser un bout de code HTML via une regexp afin de retourner les résultats dans un tableau PHP.
Donc le code source HTML à analyser (c'est pour un jeu) est le suivant:
Je voudrais faire un regexp qui me donne un tableau mutlidimensionnel avec pour chaque cellule: le nombre d'objets, une liste d'effets, une liste de valeurs pour les effets.
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 <b style="text-transform:lowercase">6 Objets</b> <div class="vert">+60 force</div> <div class="jaune">+40 magie</div> <div class="vert">+20 soins</div> <div class="jaune">+10 rapidité</div> <b style="text-transform:lowercase">5 Objets</b> <div class="vert">+40 force</div> <div class="jaune">+40 magie</div> <div class="vert">+4 rapidité</div> <b style="text-transform:lowercase">4 Objets</b> <div class="vert">+30 force</div> <div class="jaune">+30 magie</div> <div class="vert">+4 rapidité</div> <div class="part_bottom"></div>
Pour l'exemple de code ci-dessus on aurait donc:
Tab[0] = Array(6, force:magie:soins:rapidité, 60:40:20:10)
Tab[1] = Array(5, force:magie:rapidité, 40:40:4)
Tab[2] = Array(4, force:magie:rapidité, 30:30:4)
J'ai séparé les listes par un ":" que je pourrais construire via un implode().
Donc voilà mon problème.
J'ai essayé plein de regexp différentes mais je bloque.
Voilà ce que j'ai fait pour le moment:
Bon ça me renvoit juste le 1er effet mais pas les effets concaténés avec un ":"
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 //on récupère le nombre d'items $res = preg_match_all('#<b style="text-transform:lowercase">(\d+)[^<]*</b>#U', $html, $nb_items, PREG_SET_ORDER); //on récupère les effets et les valeurs foreach ($nb_items as $val) { $Tab[] = $val[1]; $a = $val[1]; $res = preg_match_all('#<b style="text-transform:lowercase">'.$a.'[^<]*</b>\s+(<div class="(vert|jaune)">([^<]*)</div>\s+)+#U', $html, $effets, PREG_SET_ORDER); foreach ($effets[2] as $un_effet) { $str = $un_effet[1]; if (preg_match("#[+]?([-]?\d+) force#i", $str, $x)) { $my_effet[0][$i] = "force"; $my_effet[1][$i] = $x[1]; etc ... } $Tab[][1] = implode(":",$my_effet[0]); $Tab[][2] = implode(":",$my_effet[1]); }
Pour ceux qui auront le courage de me lire, merci infiniment pour votre aide !!!!!
Partager