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 4print_r(preg_split('//', '131.95M', PREG_SPLIT_NO_EMPTY) );produces array: [ '131.95M']as limit is actually set to 1print_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']