Вы должны быть в состоянии разделить его на следующие возможности:
^([1-9]|[1-5][0-9]|60|all)$
Это дает вам четыре возможности:
[1-9]
однозначные значения.
[1-5][0-9]
: от десяти до пятидесяти девяти.
60
: шестьдесят.
all
: ваш вариант «все».
Но учтите, что регулярные выражения не всегда являются ответом на каждый вопрос.
Иногда они менее полезны для сложных проверок значений (хотя, в данном случае, это довольно просто). Что-то вроде следующего (псевдокод):
def isAllOrOneThruSixty(str):
if str == "all":
return OK
if str.matches ("[0-9]+"):
val = str.convertToInt()
if val >= 1 and val <= 60:
return OK
return BAD
иногда может быть, хотя и более многословным, также более читабельным и понятным.