2012-11-15 1 views
-2

나는이 정규 표현식을 사용하여 "CALENDAR YEAR: 2012"과 같은 문자열을 구문 분석합니다. 누군가 더 좋은 단어를 제안 할 수 있습니까? matcher.find()를 사용하고 싶습니다. (CALENDAR YEAR:\\s+)?((2\\d\\d\\d))Regex correction

그룹으로 2012 년을 만들고 싶습니다. 나는이 작업을 수행 할 때 널 (null) 인쇄 왜

나는 이해할 수 없다 :

while (myMatcher.find()) { 
    System.out.println(myMatcher.group(1)); 
    System.out.println(myMatcher.group(2)); 

    } 



CALENDAR YEAR: 
2012 
null 
null 

편집 : 코드가 일치를 사용하는 경우 나는 표현을 변경하고 난 여전히 밖으로 년을 구문 분석 할 것인가 끈?

+0

에있을 것입니다 ? –

+0

문자열의 서식을 지정하려는 구분 기호에 ?? – PermGenError

+0

따라서 2000 년 이전의 날짜가 존재하지 않습니까? 지금 가지고있는 것에 무엇이 잘못 되었습니까? – NullUserException

답변

0

READA REGEXP MANUAL.

분명히 ? 문자를 사용해야하는 시점과 그렇지 않은 경우를 알 수 없습니다. 또는 언제 사용합니까 () ...

방금 ​​떠날 수 있습니다.

CALENDAR YEAR:\s+(\d{4}) 

이미 트릭을해야합니다. 하지만 방금 주위의 다양한 예제를 보는 대신 임의의 문자를 정규 표현식에 던졌습니다.

+0

사실,이 경우에도 matcher.matches() – Phoenix

+0

을 사용하여 무한 루프 인쇄 2012로 이동합니다. 'matcher.matches()'가하는 일을 분명히 이해하지 못했기 때문입니다. iterator가 아닙니다. 다시 같은 결과를 내기위한 것입니다. –

+0

그리고 예,'matcher.find()'는'matcher.matches()'와는 다른 동작을합니다. 문자열에서 둘 이상의 일치가 예상되는 경우 더 나은 선택입니다. 그렇지 않으면, 둘 다 사용할 수 있지만,'matches'를 위해서 전체 문자열을 매치시키고 부분 문자열을 찾는 것의 차이점에 대한 매뉴얼을 읽을 필요가 있습니다. –

0
당신은 전혀 여분 그룹 (들)을 사용할 필요가 없습니다

- 정규식 패턴

(?<=CALENDAR YEAR:)2\\d{3}(?!\\d) 

과 함께 할 것입니다 ... 그리고 결과는 당신이 구문 분석 원하는 작업

myMatcher.group(0)