Жадность левых для группы 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} квантификатор говорит механизму регулярных выражений не возвращаться в первую группу (так называемый притяжательный квантификатор).

Другие вопросы по тегам