Пожалуйста, рассмотрите приведенное ниже решение ...
1. Определите наборы, которые должны быть сопоставлены:
- Дни с префиксом "0":
{01,...,09},{10,...,31}
- Подмножество
{10,...,31}
можно разбить на => {10,...,29},{30,31}
- Без префикса:
{1,...,31} => {1,...,9},{10,...,31}
2. Соответствующие регулярные выражения для каждого подмножества:
---------------------------------
Sub-Set | Regular-Expression
---------------------------------
{01,...,09} | [0][1-9]
{10,...,29} | [1-2][0-9]
{30,31} | 3[01]
{1,...,9} | [1-9]
---------------------------------
Теперь мы можем сгруппировать ([0][1-9])
и ([1-9])
вместе как ([0]?[1-9])
. Где ?
обозначает 0 или 1 вхождение шаблона / символа. [ОБНОВЛЕНИЕ] - Спасибо @MattFrear за указание на это.
Таким образом, в результате RegEx: ^(([0]?[1-9])|([1-2][0-9])|(3[01]))$
Проверено здесь: http://regexr.com/?383k1 [ОБНОВЛЕНИЕ]