Жадность левых для группы REGEX
В следующем регулярном выражении указывается любая необязательная группа из 1-3 цифр плюс любая необязательная группа из 4 непробельных символов.
^([\d]{1,3})?(\S{4})?$
Моя проблема в том, что если я введу 444EEE, Java сопоставит его с 44 + 4EEE, вместо того, чтобы сопоставить первую первую группу как 444 и выйти, потому что конечный EEE не состоит из 4 символов. Итак, как я могу избежать жадности левых в последней группе, так что второй последний потребляет первый. Это "?+"
Спасибо
1 ответ
Решение
Использование
boolean foundMatch = subjectString.matches("(\\d{0,3}+)(\\S{4})");
Экстра +
после {0,3}
квантификатор говорит механизму регулярных выражений не возвращаться в первую группу (так называемый притяжательный квантификатор).