prova cosė:
codice:
$newName = preg_replace('/\W+(?=.*\.\w+$)/','_',$nomefile);
togli il "+" a \W se vuoi che il numero di underscore corrisponda al numero di caratteri sostituiti.