finalement j'y suis parvenu mais espere que quelqu'un me proposera une solution (regex) plus optimisée:
function getTagAttributes($tag,$subject){
if (!preg_match('/<'.$tag.'((\s(.*)=]("\'])(.*)\\4)+)>$/Usi', $subject,$matches)) return false;
$matches=explode(' ',trim($matches[1]));
$attributes = array();
foreach($matches as $key=>$value)
{
if(!stripos($value,'=')) continue;
$value = explode('=',$value);
$attributes[trim($value[0])] = trim($value[1]);
}
return $attributes;
}
dans la version ci-dessus vu que l'expression reguliere ne capture pas directement les paires clé/valeur(ce qui était mon but au depart) je l'ai remené à quelque chose de beaucoup plus simple:
function getTagAttributes($tag,$subject,$closing=null){
$openning = '<';
$closing = !is_null($closing)?(trim($closing)!=='/>'? '>' : $closing): '>';
if(!preg_match('/'.$openning.$tag.'(.*)'.$closing.'$/', $subject,$matches)) return false;
$matches=explode(' ',trim($matches[1]));
$attributes = array();
foreach($matches as $key=>$value)
{
if(!stripos($value,'=')) continue;
$value = explode('=',$value);
$attributes[trim($value[0])] = trim($value[1]);
}
return $attributes;
}