I don't think that `StringMatchQ["x", Except[{"*"}]]` works as expected as well as `StringMatchQ["x", Except["*"]]`: StringMatchQ["x", Except[{"*"}]] StringMatchQ["x", Except["*"]] > True > True The string pattern `"*"` is an *abbreviated string pattern* consisted from the only metacharacter `*` which corresponds to **zero or more characters** according to the first point under the "Details and Options" section of [`StringMatchQ`][1]. So by the definition the pattern `Except["*"]` shouldn't give a match at all because it means negation of literally everything. The current behavior is a bug. This behavior is expected: StringMatchQ["x", {"*"}] StringMatchQ["x", "*"] > True > True StringMatchQ["x", {"\\*"}] StringMatchQ["x", "\\*"] > False > > False But the following is another bug: StringMatchQ["x", Except[{"\\*"}]] StringMatchQ["x", Except["\\*"]] > StringExpression::invld: Element Except[{\\*}] is not a valid string or > pattern element in Except[{\\*}]. >> > > StringMatchQ["x", Except[{"\\*"}]] > > StringExpression::invld: Element Except[\\*] is not a valid string or > pattern element in Except[\\*]. >> > > StringMatchQ["x", Except["\\*"]] [1]: http://reference.wolfram.com/language/ref/StringMatchQ.html