Одним из способов может быть использование отрицательного предпросмотра после сопоставления с дефисом -(?![0-9])
, чтобы проверить, что за ним не следует di git.
Чтобы не сопоставлять IP-адрес, вы можете использовать отрицательное предпросмотр для убедитесь, что он не соответствует шаблону, подобному ^(?![0-9]{1,3}(?:\.[0-9]{1,3}){3}$)
^(?![0-9]{1,3}(?:\.[0-9]{1,3}){3}$)[a-z0-9]+(?:(?:\.|-(?![0-9]))[a-z0-9]+)*$
По частям
^
Начало строки (?!
Отрицательный прогноз, проверьте, что прямо справа это не [0-9]{1,3}(?:\.[0-9]{1,3}){3}$
Соответствует ip-подобному формату
)
Закрыть взгляд вперед [a-z0-9]+
Соответствовать 1+ вхождений a-z0-9 (?:
группа без захвата (?:\.|-(?![0-9]))
Соответствует либо .
, либо -
, за которым не следует di git [a-z0-9]+
Совпадение 1+ вхождений a-z0-9, чтобы оно не могло и на .
или -
)*
Закрыть группу и повторить 0+ раз $
Конец строки
Regex demo