Ваша проблема в том, что или - |
- который вы используете, разделяет весь шаблон на две части. |
будет заключаться в скобки или конец выражения, а не только в два соседних элемента.
Вам нужно поставить несколько дополнительных скобок, чтобы показать, какую часть выражения вы хотите или отредактировали. Поэтому первым шагом к исправлению вашего паттерна будет:
^v(er)?((0{1}\.)|([1-9]+\d*\.))\d+\.\d+\.\d+
Вы также хотите поставить $
в конце, чтобы убедиться, что в конце номера версии нет ложных символов.
Кроме того, указывать {1}
не нужно, поскольку это означает, что предыдущий элемент ровно один раз, что является значением по умолчанию. Однако вы можете использовать {3}
в конце вашего паттерна, так как вам нужны три группы цифр в конце.
Точно так же вам не нужно +
после [1-9]
, так как другие цифры будут захвачены \d*
.
И мы можем также снять лишние скобки.
Таким образом, вы можете упростить ваш шаблон до следующего:
^v(er)?(0|[1-9]\d*)(.\d+){3}$