티스토리 뷰

예제 코드는 모두 Java 언어를 사용한다.

여러 문자 중 하나와 일치시키기

모든 문자가 아닌 특정 문자만 일치하는 문자열만 찾고 싶을 때는 메타 문자인 대괄호([])를 사용한다.

대괄호([])는 제목에도 있다시피 문자 집합을 형성한다.

대괄호([]) 안에 있는 문자는 모두 집합의 구성원이 되며, 집합에 속한 문자가 모두 일치할 필요는 없다.

public class code {
    public static void main(String[] args) {
        String regex = "e.[ic]c";
        Pattern pattern = Pattern.compile(regex);

        String[] strs = {
                "eric",
                "ekcc",
                "e1ic",
                "erlk"
        };

        for(String str : strs) {
            Matcher matcher = pattern.matcher(str);
            if (matcher.find()) {
                System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
            } else {
                System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
            }
        }
    }
}
/* 실행결과
str 안에 e.[ic]c 문자열이 존재한다.
str 안에 e.[ic]c 문자열이 존재한다.
str 안에 e.[ic]c 문자열이 존재한다.
str 안에 e.[ic]c 문자열이 존재하지 않는다.
*/

문자 집합 범위 사용하기

코딩 테스트 문제에 이러한 문제가 많이들 있다.

문자를 제외한 모든 문자는 삭제하라.

 

이럴 땐 정규 표현식에서는 메타 문자인 하이픈(-)을 사용한다.

하이픈(-)은 범위를 정할 때 사용하는 메타 문자이다.

public class code {
    public static void main(String[] args) {
        String regex = "[0-9]";

        String[] strs = {
                "eric1",
                "eric2",
                "eric3",
                "eric4",
                "eri0c",
                "eri2c",
                "e3ric",
                "4eric"
        };

        for(String str : strs) {
            System.out.println(str.replaceAll(regex, ""));
        }
    }
}
/* 실행결과
eric
eric
eric
eric
eric
eric
eric
eric
*/

주의할 점은 범위를 지정할 때에는 두 값 중 더 큰 값이 앞에 나오면 안 된다.

하이픈(-)은 대괄호([]) 안에서만 메타 문자인 특수한 메타 문자다.

즉, 집합 밖에서는 단순 문자로 인식이 된다.

그래서 집합 밖에서는 하이픈(-) 문자에 굳이 역슬래시(\)를 붙일 필요가 없다.

제외하고 찾기

문자 집합은 일반적으로 찾고 싶은 문자의 목록을 정하는 데 쓰지만, 제외하고 싶은 문자 목록을 정할 때도 쓸 수 있다.

메타 문자인 캐럿(^) 문자를 사용하면 된다.

public class code {
    public static void main(String[] args) {
        String regex = "eric[^A-Z]";
        Pattern pattern = Pattern.compile(regex);

        String[] strs = {
                "eric1",
                "eric2",
                "eric3",
                "ericA"
        };

        for(String str : strs) {
            Matcher matcher = pattern.matcher(str);
            if (matcher.find()) {
                System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
            } else {
                System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
            }
        }
    }
}
/* 실행결과
str 안에 eric[^A-Z] 문자열이 존재한다.
str 안에 eric[^A-Z] 문자열이 존재한다.
str 안에 eric[^A-Z] 문자열이 존재한다.
str 안에 eric[^A-Z] 문자열이 존재하지 않는다.
*/
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함