Регулярное выражение необходимо для поиска версии в строке вида:
0.6.9b-version - 0.6.9b
v0.6.99 - 0.6.99
v01.23.97 - 01.23.97
v01.23.97a-release - 01.23.97a
v1.23.97a-release - 1.23.97a
Слева какая-то начальная строка, справа то, что нужно получить.
Я растерялся закинуть это в конфигуратор, но моих знаний регулярных выражений оказалось недостаточно
Я заканчиваю это на
(\d[\w.()]+?[a-z])
но делает зеркальную операцию, удаляет наоборот то, что мне нужно оставить




узор: (v)?([0-9]+(\\.[0-9]+)*[a-z]?)(-\\w+)?
import java.util.regex.*;
public class Main {
public static void main(String[] args) {
String[] lines = { "0.6.9b-version", "v0.6.99", "v01.23.97", "v01.23.97a-release", "v1.23.97a-release" };
Pattern pattern = Pattern.compile("(v)?([0-9]+(\\.[0-9]+)*[a-z]?)(-\\w+)?");
for (String line : lines) {
Matcher matcher = pattern.matcher(line);
if (matcher.matches()) {
System.out.println(matcher.group(2)); // Group 2 contains the version number
}
}
}
}
Чтобы преобразовать строку версии в строку стандартизированной версии:
version = version.replaceFirst("v?([^-]+).*", "$1")
Это удалит первый необязательный v, сохранит все до необязательного - и удалит все, что будет после него.
Используйте средство сопоставления, как показывает @Malvin, где [] содержит только допустимые символы версии на случай, если вам нужно сопоставить только строки версии (среди прочего).
Чтобы удалить не только v, но и все нецифры,
version = version.replaceFirst("\\D*([^-]+).*", "$1")
что мне нужно изменить, если я хочу удалить количество букв в начале и оставить только 1 после цифр? vdsd123.123.123.123ahh-sdgs - 123.123.123.123a
Это уже очень полезно, но у меня все еще есть некоторые вопросы. а как насчет «и оставить только 1 букву после цифр»?
"\\D*([.\\d]+\\w?).*"
Сопоставьте
^v?(\d+(?:\.\d+)*\p{L}?).*и замените на$1.