Fix #222

`-?` means optional hyphen, also used in number regexes. `(?:...)` means group without capture, used many places.