Нужно сделать регулярное выражение для проверки строки, обозначающей версию приложения. Строка имеет вид X.Y.Z, где X, Y, Z могут быть любыми целыми числами, а также * (кроме X). После символа * дальше строки быть не должно. Перед цифрами не должно быть 0.
Примеры валидных строк:
12.2323.2
0.0.3
0.0.0
34.0.3
23.2.*
4.*
Примеры неверных строк:
34а.34.1
*
34.*.3
57.*.
d3.43.3
0004.*
1.02.*
У меня такую регулярку сделать не вышло.
Это не учебное задание
Ответ
Наивная реализация того что вы хотите:
^(0|[1-9]\d*)\.(\*|(0|[1-9]\d*)\.(\*|(0|[1-9]\d*)))(
)?$
Я получил ее следуя таким умозаключениям. Сперва составим регулярку, проверяющую строку на соответствие шаблону A.B.C, это просто:
^\d+\.\d+\.\d+(
)?$
здесь \d+ - любая цифровая последовательность, \. - точка (надо экранировать, да), ^ - начало строки, (
)?$ - конец строки, учитывающий как
, так и просто
Далее, вместо последнего блока цифр может стоять единственная звездочка, заменяем \d+ на (\*|\d+) (звездочку тоже надо экранировать):
^\d+\.\d+\.(\*|\d+)(
)?$
Также звездочка может быть вместо последних двух блоков, аналогично предыдущему меняем \d+\.(\*|\d+) на (\*|\d+\.(\*|\d+))
^\d+\.(\*|\d+\.(\*|\d+))(
)?$
Ну и остается исключить числа с ведущими нулями, т.е. это либо отдельный ноль 0, либо не ноль + несколько любых цифр [1-9]\d*. Заменяем все три блока \d+ на конструкцию (0|[1-9]\d*), получаем окончательный вариант.
Комментариев нет:
Отправить комментарий