Using the flags requires passing a limit option even if you desire no limit, use 0 or -1.
Otherwise the result is unexpected, as the flags, being predefined constants, are integers and will be taken as the split limit not the flag as intended.
echo PREG_SPLIT_DELIM_CAPTURE,' ', PREG_SPLIT_NO_EMPTY,' ', PREG_SPLIT_OFFSET_CAPTURE,"\n";
echos: 2 1 4
print_r(preg_split('//', '131.95M', PREG_SPLIT_NO_EMPTY) );
produces array: [ '131.95M']
as limit is actually set to 1
print_r( preg_split('//', '131.95M', 0, PREG_SPLIT_NO_EMPTY) );
produces array: [ "1", "3", "1", ".", "9", "5", "M"]
print_r( preg_split('/([[:alpha:]])/', '131.95M', PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) );
produces array: [ '131.95', '']
print_r( preg_split('/([[:alpha:]])/', '131.95M', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY) );
produces array: [ '131.95', 'M']