Java 8 здесь. Я пытаюсь проанализировать строку semver (или, по крайней мере, моя разновидность semver) и извлечь ее основные сегменты:
- Основной номер версии
- Minorномер версии
- Номер исправления
- Квалификатор (
RC
, SNAPSHOT
, RELEASE
и т. д.)
Вот мой код:
String version = "1.0.1-RC";
Pattern versionPattern = Pattern.compile("^[1-9]\\d*\\.\\d+\\.\\d+(?:-[a-zA-Z0-9]+)?$");
Matcher matcher = versionPattern.matcher(version);
if (matcher.matches()) {
System.out.println("\n\n\matching version is: " + matcher.group(0));
System.out.println("\nmajor #: " + matcher.group(1));
System.out.println("\nminor #: " + matcher.group(2));
System.out.println("\npatch #: " + matcher.group(3));
System.out.println("\nqualifier: " + matcher.group(4) + "\n\n\n");
}
При этом я получаю следующий вывод на консоль:
matching version is: 1.0.1-RC
2019-10-18 14:32:05,952 [main] 84b37cef-70f9-4ab8-bafb-005821699766 ERROR c.s.f.s.listeners.StartupListener - java.lang.IndexOutOfBoundsException: No group 1
Что мне нужно сделать с моим регулярным выражением и / или нашим использованием API Matcher, чтобы я мог извлечь:
1
в качестве основного номера 0
в качестве младшего номера 1
в качестве номера патча RC
как классификатор
Есть идеи?