Wildcard 가 포함된 string 을 regular expression 으로 변환하기
java 에서 프로그래밍을 하면 .properties 를 사용해서 설정값을 불로오는 경우가 종종있다. 이 경우에 일반적으로 String 으로 값을 가져온다. 그런데 wildcard(* 같은 문자) 가 가능하도록 하고 싶었다. 그래서 처음 string 을 replaceAll 을 이용해서 변환하려고 했는데, 이게 되게 여러번 해야 할 듯 싶었다.
그래서 좀 찾아봤더니 아래처럼 한 character 씩 읽어서 쓰는 작업을 반복하면서 wildcard 문자가 나오면 해당하는 regular expression(정규표현시) 문자로 넣어주는 방법을 사용하는 글이 있었다. 개인적으로 이 방법이 더 효율적인 듯 하다.
code from : Convert wildcard to a regex expression - Real's Java How-to
public static String wildcardToRegex(String wildcard){
StringBuffer s = new StringBuffer(wildcard.length());
s.append('^');
for (int i = 0, is = wildcard.length(); i < is; i++) {
char c = wildcard.charAt(i);
switch(c) {
case '*':
s.append(".*");
break;
case '?':
s.append(".");
break;
// escape special regexp-characters
case '(': case ')': case '[': case ']': case '$':
case '^': case '.': case '{': case '}': case '|':
case '\\':
s.append("\\");
s.append(c);
break;
default:
s.append(c);
break;
}
}
s.append('$');
return(s.toString());
}
댓글 없음:
댓글 쓰기