Fix #222

`-?` means optional hyphen, also used in number regexes. `(?:...)` means group without capture, used many places.
Thanks Ben for the in-depth explanation. Not only is that one correct and efficient, but it best exposes the `word [separator word]*` pattern that motivates the design in the first place.