У меня есть следующее выражение регулярного выражения:
^(\d*)(?:\.)(\d*)(?:|(?:\.)(\d*))(?:|(?:\.)([a-zA-Z0-9_-]*))?$
Вы можете проверить это здесь .
Я хочу использовать его, например, для разбора номера версии на группы (где g1 - группа № 1 и т. д.):
1.2 => g1(1),g2(2)
1.2.3 => g1(1),g2(2),g3(3)
1.2.3.4_or_text => g1(1),g2(2),g3(3),g4(4_or_text)
Это почти работает, за исключением случаев, когда третья группа является необязательной, и переход к четвертой группе, если версия состоит из 3 частей.
Итакчто на самом деле происходит так:
1.2 => g1(1),g2(2)
1.2.3 => g1(1),g2(2),g3(),g4(3) <-- I want to fix this
1.2.3.4_or_text => g1(1),g2(2),g3(3),g4(4_or_text)
Я не могу точно определить, что я делаю неправильно.
То, как он работает сейчас, также означает, что справедливо следующее: 1.2.3_or_text
, поскольку он анализируется как g1(1),g2(2),g3(),g4(3_or_text)