Manito prueba asi:
Código PHP:
Ver original$cadena = 'Fase 1: 0.00000112 % 4';
preg_match('/[0-9]{1,20}+[.]+[0-9]{2,20}/', $cadena, $sale, PREG_OFFSET_CAPTURE
);
eso retorna:
array(1) { [0]=> array(2) { [0]=> string(10) "0.00000112" [1]=> int(8) } }
Esta línea
[0-9]{1,20} indica que busque números antes del punto con una longitud de entre 1 y 20 digitos.
Esta
[0-9]{2,20} realiza igual trabajo, pero después del punto.
ya allí juegas con las longitudes mínimas y máximas si es que estas tienen muchas variaciones, pues dependiendo de las formulas los float podrían tener cualquier cantidad de caracteres de longitud.
VER MUESTRA