2012-04-29 5 views
0

정규 표현식이 작동하는 데 문제가 있습니다.자바 정규식 선택 문자

정규 표현식은 다음과 같습니다

([0-9]m)* ([0-9]f)* 

디지트는 선택 사항입니다 "m"또는 "F"하지만 "m"또는 "F"앞에 와야합니다. 예 :

1m 2f 
1m 
6f 

무엇이 잘못 되었습니까?

+0

방법에 대한 [0-9] (m | F)? – BeRecursive

+0

'2f 1m'을 허용해야합니까? '2m 1m'은 어떻습니까? '11m'은 어때? –

+1

"m"또는 "f"가 선택 사항이라고하면 자체적으로 '1'입니까? – Gareth

답변

8

*은 이전 토큰과 0 회 이상 일치하므로 원하는대로 표시되지 않습니다.

이 당신이 필요로하는 정규 표현식을 구축하는 데 도움이 될 것입니다

  • ?는 0 또는 1 일치를 의미하는.
  • | 교대로.
  • (?:...) (비 캡처 그룹).
  • ^$은 문자열의 시작과 끝 부분에 앵커를 지정합니다.

여러분이 직접 해결책을 찾을 수 있다고 생각하지만, 완성을 위해 가능한 해결책을 하나 제시 할 것입니다.


귀하의 질문은 그냥 당신이 원하는 가정거야, 그래서 매우 명확하지 않은 일치하도록 다음

1m 2f 
1m 
6f 
0m 

을하고 원하는 것을 일치하지하려면 다음

1 
m  
11m 
1m 1m 
2f 3m 
1m 2f 
"1m 2f" 

이러한 가정이 올바르지 않은 경우 질문을 명확하게 작성하십시오. 이러한 전제와

는,이 시도 :

^[0-9]m(?: [0-9]f)?$|^[0-9]f$ 

당신은 또한 2f 3m 다음과 일치 사용하려면이 :

^[0-9]m(?: [0-9]f)?$|^[0-9]f(?: [0-9]m)?$