[컴][자바] property 에 wildcard 사용하려 할 때

정규표현식으로 변환하기 / 와일드 카드 문자를 정규표현식으로 변환하기




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());
}


댓글 없음:

댓글 쓰기