Поисковой запрос должен быть таким: owner/repository
требования для owner:
- максимальная длина 39
- может содержать цифры от 0 до 9, все латинские буквы и дефис "-"
-не должен начинаться и заканчиваться на дефис
-не должно быть сразу двух дефисов вместе, типа "--"
После owner обязательно должен стоять "/"
Требования для repository:
- максимальная длина 39
- может содержать цифры, лат. буквы и дефис ( в отличии от owner, дефис может повторяться и стоять как в начале так и в конце).
Битый час бился над этой проблемой, никак не получается, кто может помочь?
Мне кажется, сделать требования к owner одним регексом - малореально. Можно ли при поиске накладывать несколько регексов, требуя, чтобы строка удовлетворяла им всем?
Для repository примерно так (считая, что минимальная_длина = 1):
^[a-z0-9-]{1,39}$
Если бы owner был таким же - то общий регекс примерно такой:
^[a-z0-9-]{1,39}/[a-z0-9-]{1,39}$
Вопрос в том, как проверять owner. Я набросал такой вариант:
^[a-z0-9][a-z0-9-]{0,37}[a-z0-9]$
т.е. "в начале и в конце - не минус" ну и "в середине - до 37 букв, цифр или минусов". Но тут нет проверки на двойной минус. И отдельно надо оговорить однобуквенный вариант:
^[a-z0-9]|([a-z0-9][a-z0-9-]{0,37}[a-z0-9])$
Как видите - регекс стремительно разрастается и усложняется. А я выполнил не все требования топиккастера. Причём последнее требование - "отрицающее" (grep для этого использует ключ -v). И тут я забуксовал.
Александр Таратин, если подумать, то можно [a-z\d-]{1,39}, а остальные проверки сделать так: ^(?!-) - не должен начинаться на дефис ^(?![^\/]*-\/) - не должен заканчиваться на дефис ^(?![^\/]*--) - не должно быть сразу двух дефисов вместе
Потом объединить эти проверки: ^(?!-|[^\/]*-[-\/])
dodo512, Идеально! Вынесите в отдельный ответ. Можно кстати ужать регулярку еще на 2 символа если убрать экранирование / внутри [ ]. Оно там не обязательно.