자바 정규표현식의 그룹 및 치환
자바 정규표현식의 그룹 및 치환
public void test() throws Exception {
String EXAMPLE_TEST = "사용자 정보 : email=u{email}, 아이디=u{account}";
String regexp = "u\\{(\\w+)\\}";
Pattern pattern = Pattern.compile( regexp);
Matcher matcher = pattern.matcher( EXAMPLE_TEST);
StringBuffer result = new StringBuffer();
while ( matcher.find()) {
System.out.print( "Start index: " + matcher.start());
System.out.print( " End index: " + matcher.end() + " ");
String propertyName = matcher.group(1));
matcher.appendReplacement( result, ObjectUtil.getProperty( user, propertyName));
}
matcher.appendTail( result);
System.out.println(result.toString());
}
위 코드는 사용자 정보를 표시하는 문자열이 입력되었을때 자동으로 User 객체에서 데이터를 매핑해서 리턴해 주는 함수의 예시입니다. 이때 정규표현식을 사용하면 편리합니다.
정규표현식인 regexp 변수 안의 ( ) 안의 담긴 문자열은 자동으로 Matcher 클래스에서 그룹으로 인식됩니다.
따라서 matcher.group(1) 메소드로 u{ } 안의 문자열(email, account)을 읽어올 수 있습니다.
matcher.appendReplacement 함수로 find() 된 문자열을 치환하며
while 문을 벗어난 후 matcher.appendTail 함수로 나머지를 추가하게 되면 치환이 완료된 문자열을 얻을 수 있습니다.
참고 :
http://ocpsoft.org/opensource/guide-to-regular-expressions-in-java-part-1/
http://www.vogella.com/articles/JavaRegularExpressions/article.html