[java] 정규식 No match found

공수정·2022년 7월 21일
0

java

목록 보기
2/3

오류 상황

@Test
void 정규식_테스트() {
	String text = "가나다(2)";

	Pattern pattern = Pattern.compile("\\([0-9]+\\)$");
	String res = pattern.matcher(text).group();
	log.info("res = {}", res);
}

가나다(2)에서 (2)와 같이 괄호 안에 숫자만 있는 부분을 정규식으로 잡아서 처리하고 싶었는데, 어째서인지 자꾸 No match found라는 메시지가 나오면 오류가 나왔으며, find()를 실행 했을 때에는 true값이 나오는 이상한 상황이였다.

자바 정규식은 PatternMatcher를 이용하는데, Matcher에서 group()은 매칭된 부분을 반환해주고, find()는 대상 문자열과 패턴이 일치하는 지를 boolean값으로 반환해준다.
당연히 group()을 했을때, 반환되는 문자열이 없으면 ''와 같이 리턴이 될 줄 알았는데, 계속해서 오류로 처리가 되었다.

문제 원인

find()를 먼저 실행해서 찾게 하고, 그 이후에 end(), group()등과 같은 메서드를 실행해야 하는데, 하지 않아서 문제가 되었다.

해결방법

@Test
void 정규식_테스트() {
	String text = "가나다(2)";

	Pattern pattern = Pattern.compile("\\([0-9]+\\)$");
	Matcher matcher = pattern.matcher(text);
    if(matcher.find()){
    	String res = matcher.group();
		log.info("res = {}", res);
    }
}

위와 같이 find()를 먼저 실행해서 찾고, 그 이후에 group(), end()와 같은 메서드를 실행한다.

참고
1. [Java] 정규표현식 사용법 및 예제 - Pattern, Matcher

profile
계속해서 공부하는 개발자입니다 :)

0개의 댓글