I looked at the documentation for cpe Naming Specification Version 2.3
http://csrc.nist.gov/publications/nistir/ir7695/NISTIR-7695-CPE-Naming.pdf
Specification says, "*" or "-" is explained as "ANY" or "NA". (6.1.2.2 Summary of algorithm)
But the "?" is simply a special character that can be handled by other CPE specifications. It appears that "?", "??" can be used (5.3.2 Restrictions on attribute-value strings).
I wonder if this has the same meaning as regular expressions. Then I wonder why they didn't write that down in the specification document.