Mi sembra di capire tu voglia lasciare l'estensione col punto, prova questa:

codice:
$string = "moccolo & puzzetta - ciao bell'idiota!.mp3";
$rpl = preg_replace('/\W(?!\w*?$)/','_',$string);