Taglia i caratteri duplicati consecutivi

Quindi sto creando URL per le mie pagine facendo quanto segue:

$uri = strtolower($info->name); $uri = str_replace('&','and',$uri); $uri = $info->id."-".preg_replace('/[^a-zA-Z0-9]/','-',$uri); 

Fondamentalmente faccio tutto in minuscolo, cambia & in e cambia tutti i caratteri speciali in un - . Il mio unico problema ora se per esempio $info->name è this is - a string che verrà mostrata come this-is---a-string .

Mi piacerebbe che questo diventasse this-is-a-string senza fare qualcosa come str_replace('---','-',$input);

Immagino di aver bisogno di un'espressione regolare per questo, ma sono orribile con quelli, quindi mi chiedevo se qualcuno potesse darmi una mano.

Modificare

 $uri = $info->id."-".preg_replace('/[^a-zA-Z0-9]/','-',$uri); 

a

 $uri = $info->id."-".preg_replace('/[^a-zA-Z0-9]+/','-',$uri);