2012-06-14 4 views
0

В следующем регулярном выражении указывается любая необязательная группа из 1 до 3 цифр плюс любая необязательная группа из 4 символов без пробелов.Левая защита для группы REGEX

^([\d]{1,3})?(\S{4})?$ 

Моя проблема заключается в том, что если я ввода 444EEE, Java, соответствует как 44 + 4EEE, вместо того, соответствующие первой первой группы, как 444 и выход, так как скользящий ЕЕЕ не сделан из 4-х символов. Итак, как я могу избежать жадности левой стороны последней группы, так что вторая последняя потребляет в первую очередь. Является ли это «? +»

Спасибо

+0

Вопрос: Соответствует ли '1234'? Действительна ли пустая строка? Правила пока еще не определены. –

ответ

2

Использования

boolean foundMatch = subjectString.matches("(\\d{0,3}+)(\\S{4})"); 

Дополнительного + после {0,3} квантора говорит регулярное выражение двигатель не возвращаться назад в первую группу (так называемого possessive quantifier).

+0

добавьте '?' К группам, потому что из того, что я вижу в вопросе ОП, они являются необязательными. – Pshemo

+0

Здесь стоит терминологический вопрос: проблема не в * жадности * (которая определяет, какие совпадения по порядку рассматриваются), а о том, чтобы сделать несколько совпадений не считаться вообще. –

+0

@Pshemo: Первая группа * является * необязательной, поскольку она позволяет цифры '0'. Однако вы правы - если строка '1234', это регулярное выражение не пройдет. –

 Смежные вопросы

  • Нет связанных вопросов^_^