@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값이 나오는 이상한 상황이였다.
자바 정규식은 Pattern과 Matcher를 이용하는데, 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()와 같은 메서드를 실행한다.