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:
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>
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.
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:

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]);
}
Bon ça me renvoit juste le 1er effet mais pas les effets concaténés avec un ":"

Pour ceux qui auront le courage de me lire, merci infiniment pour votre aide !!!!!