word にはマッチするが、wordd にはマッチしない。
+ をサポートしているかどうかは、コマンドによります。 grep では使えない、perl 内蔵の grep では使える、などなど。 * は必ずサポートしているので、面倒でも [a-zA-Z0-9]+ を [a-zA-Z0-9][a-zA-Z0-9]* と書くと普遍的です。 # perl では回数も指定できます。[a-zA-Z0-9]{3} は3回。 ということなので、grep するなら [a-zA-Z0-9][a-zA-Z0-9]*\.c perlなら \w+\.c あるいは \b\.c でいけると思います。
(query-replace-regexp "\\(いい\\|わるい\\)\\(.+?\\)。" "\\2は\\1。")
(string-match "^\\(バタ\\)\\{2\\}$" "バタバタ") 0 (string-match "^\\(バタ\\)\\{2\\}$" "バタ") nil