El modificador %[] le indica a scanf que solo puede aceptar los caracteres incluidos entre los corchetes.
sscanf("accabdaef", "%[abc]%s", p, q);
// salida
// p="accab" q="daef"
// p contiene los caracteres mientras sea a,b,c
El ^ sirva para tomar el complemento
sscanf("a44cc2bf", "%[^123]%s", p, q);
// p="a44cc" q="2bf"
// p contiene cualquier caracter excepto 1,2,3
Por ejemplo [a-zA-Z0-9] indica que solo acepte letras y numeros, [^0-9] dice que acepte cualquir caracter excepto numeros.