bueno, si lo piensas... entonces no es capturar [0-9] sino que solo hay que reemplazar <span/> por <div/> ¿cierto??
es igual que con cualquier otro reemplazo..
Código PHP:
$foo = '<candy does="69" alt="not sex!"/>';
$bar = preg_replace('/<(\w+)\s+(\w+)="(\d+)"([^\/]*)\/?>/', '<nothing \\2="\\3"\\4/>', $foo);
var_dump($foo, $bar);