Lo primero,
un poco de teoría. Supongo que no te interesará, pero algo en mí me obliga a decírtelo.
Los números reales son algo más que "negativos decimales". Para eso puedes limitarte a números racionales.
A partir de ahí, te recomiendo esta regexp:
En la tuya, el guión en los corchetes hay que escaparlo, porque indica un rango de carácteres. Además, antes del punto tiene que haber \d+, no *, y el ? debe ser para el \.\d+ entero, porque es lo que se puede obviar. Además después del punto también debe ser \d+ y no *.
Saludos (: