2012-06-14 3 views
0

다음 정규식에는 1에서 3 자리까지의 임의의 그룹과 공백이 아닌 4 개의 임의의 그룹이 포함됩니다.그룹에 대한 좌파의 욕심 REGEX

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

내 문제는 I 입력 444EEE 자바가 일치하면 44 + 4EEE 대신으로, 444로 먼저 첫 번째 그룹과 일치하는 트레일 링 EEE는 4 개 문자로 제조되지 않기 때문에 종료. 그렇다면 마지막 그룹의 좌파 성욕을 어떻게 피할 수 있습니까? 그래서 두 번째 마지막이 먼저 소모됩니다. 가? "+"

{0,3} 정량 후 당신에게

+0

하나의 질문 : '1234'는 (는) 유효한 일치입니까? 빈 문자열이 유효합니까? 규칙은 아직 잘 정의되어 있지 않습니다. –

답변

2

사용

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

여분 + 감사는 정규식 엔진 (A possessive quantifier 소위) 첫 번째 그룹에 철수하지를 알려줍니다.

+0

그룹에'? '를 추가하십시오. 왜냐하면 OP 질문에서 볼 수있는 것은 선택 사항이기 때문입니다. – Pshemo

+0

여기에 가치가있는 전문 용어가 있습니다 : 문제는 * greediness * (일치하는 순서를 결정 함) 전혀 고려하지 말라. –

+0

@Pshemo : 첫 번째 그룹 *은 '0'자릿수를 허용하기 때문에 * 선택 사항입니다. 그러나, 당신 말이 맞아요. 문자열이'1234'라면,이 정규식은 통과하지 못할 것입니다. –