* Upper and lower case letters, numbers, and underscore. This is what one commonly refers to as word characters as they're the least common denominator of what identifiers in programming language are usually allowed to consist of.
* Everything else (punctuation and other symbols, etc.). We'll call these non-word characters.
w, b, e, etc. will work in units of consecutive characters of the same type. So, if a consecutive set of word characters is a word, a consecutive set of non-word characters is a non-word, and everything else is whitespace. w will take you from the current word or non-word to the beginning of the next word or non-word. e will take you to the end of the current word or non-word, unless you're already there (one character word or non-words, for example), then it will take you to the end of the next word or non-word. b will do the same as e but to the beginning and work towards the previous.
The upper case versions of these commands, W, B, and E, treat the aforementioned word and non-word characters as of the same type, so you move in units of consecutive non-whitespace characters.