@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()
와 같은 메서드를 실행한다.