To answer your question, it is the backslash. Have a look here for a concise syntax. It is really from W3C.
I would say though that you don't need to escape the dash in your case, i.e. <xs:pattern value="[0-9]-[0-9]"/>
is perfectly valid and does what you describe: number, dash, number.
You could escape it, as in <xs:pattern value="[0-9]\-[0-9]"/>
; again, you don't need to, the effect is the same.
If you escape it within a character class expression, then it would make a difference, i.e. a "[0\-9]"
would mean one of zero, dash, nine (instead of the inclusive range zero, one, two, ... all the way to nine).