2012-04-17 2 views
0

'반복적 인 방식'으로 문자열의 유효성을 검사하려고하는데 모든 tryouts가 실패합니다! 나는 그것이 약간 복잡하다는 것을 안다. 그리고 나는 아마 당신이 나에게 그것을 올바르게하는 방법을 가르쳐 줄 수 있었다고 생각하고있다. 저는 여러분 중 대부분이 정규 표현식 패턴을 사용하도록 제안 하겠지만, 무한한 "세트"에 대해 정규 표현식을 어떻게 정의 할 수 있는지, 그리고 일반적으로 어떻게, 그리고 일반적으로는 알지 못한다고 가정합니다.자바 : 특정 문자열 패턴의 유효성 확인

내가 유효성을 검사 할 문자열이 이다 "| NUMBER_ONLY, 아무것도 | 아무것도 NUMBER_ONLY ..."

예를 들어 : "안녕하세요 | 5, 단어 | 10"와 "안녕하세요 | 5, 단어 | 10 "모두 유효합니다.

참고 : 문자열이 쉼표로 끝나거나 쉼표가 없으면 마음에 들지 않습니다. ','

답변

1

Kleene star (*)와 각 부분을 확인해야 . 다음 패턴은 트릭을 수행해야합니다.

[^,|]+\|\d+(,[^,|]+\|\d+)*,? 
A----------B--------------C- 

파트 A가 첫 번째 요소와 일치합니다. 파트 B는 다음 요소 (별표에주의)와 일치합니다. 파트 C는 끝에있는 선택적 쉼표입니다.

경고 : Java 문자열에서 백 슬래시를 이스케이프해야합니다.

+0

와우, 거의 완벽 해요. "aa | 3, aa | 4, hi | aa, aa | 6"와 같은 문자열이 테스트를 통과 한 것으로 보입니다. < – Popokoko

+0

아, 알 수 있습니다. 새 버전을 확인하십시오. '[^, |]'는','및'| '를 제외한 모든 것과 일치합니다. –

+0

놀랍게도, 그것은 작동합니다! 그건 꽤 믿을 수없는, 만약에 대한 정규 표현식 과정을 열고, 메신저! 다시 한 번 감사드립니다! – Popokoko

1

문자열을 배열로 분할하여 | 구분 기호로 구분하는 것이 좋습니다. 그리고 각 부분을 별도로 확인하십시오. (첫 번째 제외) 각 부분은 정규 표현식에서 "무한 집합"을 정의 할 수 있습니다

분할 , 업데이트 패턴 \d+(,.*)?

다음과 일치 .*|\d+

+0

테스트 입력을 받는다는 것은 의미가 없습니다. 쉼표는 상위 레벨 분리 기호이고 | 내부 분리 기호입니다. –

+0

@MarkoTopolnik 흠, 정말로. 고마워, 나는 그것을 알아 차리지 못했다. –

+0

Marko가 맞습니다. 숫자를 다른 단어와 어떻게 구분합니까? – Popokoko