Because the empty match is the first match for any "zero or more" pattern if the string does not start with it (and it's not a blank but an empty string). It's the same for the pattern 'x*' and this ">335" string. The second possible match for '[0-9]*' is 335. If you want it to match only the digits then instead use '[0-9]+', or restrict match to the second occurrence, like
=REGEX(">335";"[0-9]*";;2)
'[0-9]{1,3}' matches one to three digits, as many times as possible.
