Because * means "zero or more", so abc[xyz]*def means abc followed by zero or more of x, y or z, followed by def.
And ? means "exactly one of", so abx[xyz]?def means abc followed by exactly one of x, y or z, followed by def.
So: abcxyzdef = abc followed by 3 chars which are x, y or z, followed by def => matches the first regex (because 3 is equal to "zero or more"), but does not match the second (because 3 is not equal to "exactly one").