Oui.  
Attention que $matches est un tableau, donc 86866 sera contenu dans $matches[0].
 
En général on utilise le / comme délimiteur d'expression, et pas le - comme tu l'as fait.
 
Dans ton cas précis, voici l'expression que j'utiliserais:
Code :
 - preg_match("/-([0-9]{4,})-/","4-panasonic_lumix_dmc_tz7_10_1_mpixels_noir_-86866-numerique-appareil_photo_numerique_compact ",$matches);
 
  | 
 
Pourquoi? Parce que comme cela tu t'assures que tu détectes 86866 uniquement s'il est entouré de "-".
 
Dans ce cas, $matches sera:
$matches[0] => -86866-
$matches[1] => 86866   (délimité par les parenthèses)
 
Ce sera donc $matches[1] qu'il faudra utiliser pour trouver ton Id.