Как уже упоминалось, регулярные выражения совершенно не подходят для использования . Вместо этого используйте TryParse, чтобы преобразовать строку в целое число, а затем проверьте, делится ли целое число на 60.
Тем не менее, поучительно посмотреть, как это может работать с регулярным выражением.
Во-первых, из однозначных чисел только 0 делится на 60 равномерно. Из нецифровых чисел все числа, делимые на 60, также делятся на 20 и поэтому заканчиваются на 00, 20, 40. , 60 или 80. Это легко проверить с помощью регулярного выражения.
Предположим, он прошел первый тест. Из этого теста мы знаем, что число делится на 20. Теперь все, что нам нужно сделать, - это показать, что оно делится на 3. Если это так, то оно делится на 20 и 3 и, следовательно, должно делиться на 60, поскольку 20 и 3 взаимно просты.
Итак, нам нужно регулярное выражение, которое может определить, делится ли число на 3.
Хорошо известно, что числа, кратные трем, таковы, что сумма их цифр делится на 3.
Также хорошо известно, что каждому регулярному выражению соответствует конечный автомат, а каждому конечному автомату соответствует регулярное выражение.
Поэтому, если мы сможем придумать конечный автомат, который определяет делимость на три, мы закончили.
Это легко сделать. Наш конечный автомат имеет три состояния: A, B и C. Начальное состояние - A. Принимающее состояние - A. Переходы:
В состоянии A входы 0, 3, 6 и 9 переходят в состояние A. Входы 1, 4 и 7 переходят в состояние B. Входы 2, 5 и 8 переходят в состояние C.
В состоянии B входы 0, 3, 6 и 9 переходят в состояние B. Входы 1, 4 и 7 переходят в состояние C. Входы 2, 5 и 8 переходят в состояние A.
В состоянии C входы 0, 3, 6 и 9 переходят в состояние C. Входы 1, 4 и 7 переходят в состояние A. Входы 2, 5 и 8 переходят в состояние B.
Все остальные входы переходят в состояние ошибки.
И мы закончили; у нас есть конечный автомат, который проверяет делимость на 3. Поэтому мы можем построить регулярное выражение, которое проверяет делимость на 3; если мы объединим это с регулярным выражением, которое проверяет делимость на 20, то мы получим желаемое регулярное выражение. Язык чисел, написанных в десятичной записи, делимых на 60, является обычным языком.
Фактическое построение такого регулярного выражения оставлено в качестве упражнения. (Похоже, это то, что сделал Tiftik.)
Упражнение: можете ли вы придумать регулярное выражение, которое определяет, содержит ли строка десятичное число, которое делится на 70 равномерно? Если сможешь, посмотрим. Если нет, можете ли вы предоставить доказательство того, что такого регулярного выражения не существует? (То есть язык, который я описываю, не является регулярным.)