It gives you the first match it finds.
In your abc example, c is a match for [[:alpha:]]+, so it stops there. The actual regexp matching is always forwards; it's just the starting position which is moved backwards until a match is found. If you searched for "\\b[[:alpha:]]+" then abc would be the first match.
Note that what you are (IIUC) expecting would ...
Ibuffer is what you're looking for.
Mark your buffers any way you prefer: using m to mark them manually, % g by regexp content-matching, * M to mark by major mode, or whatever other option which suits your fancy -err needs.
Use Q to make a regexp search and replace on marked buffers or I for plain search and replace.
Do the replaces, then go ...