2014-10-14 2 views
1

저는 경주 결과를 해석하는 프로그램을 작성하려고합니다. 그러나이 작업을 수행하려면 String.matches(String regex) 메서드를 사용하여 문자열이 특정 패턴과 일치하는지 테스트하기 위해 정규 표현식을 사용해야합니다. 이 메서드를 사용할 때 true을 반환 할 것으로 예상되는 일부 문자열은 false 대신 반환하십시오. 정규식 패턴으로 다음 문자열을 사용String.matches()가 예기치 않게 false를 반환합니다.

, 문자열의 일부 때뿐만 아니라 true를 반환해야 true 및 기타 false를 반환 :

regex = "[ ]*[1-9]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[1-9]+[ ]+[1-9]+[ ]+[0-9:.]+[ ]+" 

이이 string.matches(String regex) 방법 true를 반환하는 문자열의 일부가 :

" 1 Ryan Kepshire Crown Point 31 4 16:31 " 
" 2 Matthew Mosak Crown Point 34 4 16:44 " 
" 3 Dylan Wallace Crown Point 36 4 16:58 " 
" 4 Nicholas Zak Hanover Central 51 6 17:08 " 
" 5 Joshua Whitaker Crown Point 37 4 17:16 " 
" 8 Collin Allen Hobart 64 8 17:23 " 
" 9 Zachary Hoover Crown Point 29 4 17:29 " 

다음은와 false를 반환하는 문자열의 일부입니다방법 :

" 6 Christopher Ramos River Forest 103 12 17:18 " 
" 7 Boyer Hunter Lowell 78 10 17:20 " 
" 10 Miguel Tapia Merrillville 98 11 17:32 " 

상단 7이 통과하는 동안 맨 아래의 3 개 문자열이 정규식 테스트에 실패한 이유를 확인하는 데 도움이 필요합니다. integers.That에서 0을 허용하지 않습니다

+2

문자 클래스를'[1-9]'에서'[0-9] '로 변경하면됩니다. –

답변

5
[ ]*[0-9]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]+[a-zA-Z]+[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[a-zA-Z]*[ 
    ^
]?[a-zA-Z]*[ ]?[a-zA-Z]*[ ]?[0-9]+[ ]+[0-9]+[ ]+[0-9:.]+[ ]+ 
          ^  ^ 

귀하의 정규식은 여기 failing.See 이유입니다.

http://regex101.com/r/uH3tP3/5

나는 0 동의를 수정했습니다.

Ex. [1-9]+10을 허용하지 않습니다.

"6 크리스토퍼 라모스 강 숲 103 12 17시 18분"// 실패

인해 103 "7 보이어 헌터 로웰 (78) 10 17시 20분"// 실패로 인해 10

"10 미구엘 Tapia Merrillville 98 11 17:32 // 인해 실패합니다 10

+0

고마워요. 나는 그것을 놓쳤다 고 생각하지 않는다. n regex101.com. 좋은 리소스입니다. –

+0

@CyberGhost 당신은 환영합니다 :) – vks

관련 문제