Внутри класса символов [...]
a -
обрабатывается специально (как оператор диапазона) , если , оно окружено символами с обеих сторон. Это означает, что если вы включите -
в начале или в конце класса символов, он будет трактоваться буквально (не спец).
Так что вы можете использовать регулярное выражение:
^[a-z-]+$
или
^[-a-z]+$
Поскольку добавленный нами -
трактуется буквально, избавляться от него не нужно. Хотя это не ошибка, если вы это сделаете.
Другой (менее рекомендуемый) способ - не включать -
в класс символов:
^(?:[a-z]|-)+$
Обратите внимание, что в этом случае скобки не являются обязательными, так как |
имеет очень низкий приоритет, поэтому с круглыми скобками:
^[a-z]|-+$
Будет соответствовать строчный алфавит в начале строки и один или несколько -
в конце.