Мне нужно извлечь подстроку из строки с помощью регулярных выражений.Сложность (для меня) заключается в том, что строка может иметь один из двух форматов:
либо LLDDDDLDDDDDDD / DDD (например, AB1000G242424 / 001), либо только от 1 до 7 цифр (например, 242424).
Подстрока, которую мне нужно извлечь, должна быть: Если строка 7 цифр или длиннее, то извлечь подстроку, состоящую из 7 цифр.В противном случае (если строка короче 7 цифр), извлеките подстроку, состоящую из 1-6 цифр.
Ниже приведена одна из моих попыток.
String regex = ("([0-9]{7}|[0-9]{0,6})");
Pattern pattern = Pattern.compile(regex);
Matcher matcher;
matcher = pattern.matcher("242424");
String extractedNr1 = "";
while (matcher.find()) {
extractedNr1 += matcher.group();
}
matcher = pattern.matcher("AB1000G242424/001");
String extractedNr2 = "";
while (matcher.find()) {
extractedNr2 += matcher.group();
}
System.out.println("ExtractedNr1 = " + extractedNr1);
System.out.println("ExtractedNr2 = " + extractedNr2);
Вывод:
ExtractedNr1 = 242424
ExtractedNr2 = 1000242424001
Я понимаю, что вторая группа является конкатом из всех групп, но не понимаю, почему такие матчи устроены так.Могу ли я сделать регулярное выражение, которое немедленно остановится после нахождения совпадения (с приоритетом для первого варианта, то есть 7 цифр)?Я думал об использовании некоторых условных выражений, но, очевидно, они не поддерживаются в java.util.regex, и Я не могу использовать стороннюю библиотеку. Я могу сделать это в java, очевидно, но весь смысл используется регулярное выражение.