티스토리 뷰

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

이스케이프 살펴보기

이스케이프(escape)에 대해 이해해야 메타 문자를 더욱 이해할 수 있게 된다.

메타 문자들은 정규 표현식에서 특별한 의미를 가지므로 자기 자신을 문자 그대로 표현할 수 없다.

Java 언어에서는 Pattern.compile에서는 컴파일 에러가 발생한다.

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

        String[] strs = {
                "[eric]",
                "[]eric"
        };

        for(String str : strs) {
            Matcher matcher = pattern.matcher(str);
            if (matcher.find()) {
                System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
            } else {
                System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
            }
        }
    }
}

정규표현식 [2]에서도 설명했듯이, 메타 문자는 그 앞에 역슬래시를 붙여 문자 그대로 해석되게(이스케이프) 할 수 있다.

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

        String[] strs = {
                "[eric]",
                "[]eric"
        };

        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 문자열이 존재한다.
str 안에 \\[e 문자열이 존재하지 않는다.
*/
🐻 Java에서 역슬래시를 사용하려면 역슬래시 4개를 연달아 사용해야한다. ex) \\\\

공백 문자 찾기

메타 문자는 일반적으로 두 가지 범주로 나뉜다.

  • 텍스트와 일치하는 문자 ex) 마침표(.)
  • 정규 표현식 문법의 일부로 쓰는 문자 ex) 대괄호([])

공백 메타 문자를 살펴보자.

정규 표현식 검색을 수행할 때, 공백 문자들을 찾아야 할 때가 있다.

탭문자를 모두 찾거나 줄바꿈 문자 같은 공백 문자 말이다.

아래 표는 공백 메타 문자를 정리한 것이다.

메타 문자 설명
[\b] 백스페이스
\f 페이지 넘김
\n 줄바꿈
\r 캐리지 리턴
\t
\v 수직 탭
public class code {
    public static void main(String[] args) {
        String regex = "[\\\\n\\\\t]";
        Pattern pattern = Pattern.compile(regex);

        String[] strs = {
                "[eric]\\n\\n\\n",
                "[]eric\\t\\t\\t"
        };

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

str 안에 [\n\t] 문자열이 존재한다. str 안에 [\n\t] 문자열이 존재한다.

특정한 문자 형태와 일치시키기

자주 쓰는 문자 집합들은 특수한 메타 문자로 대신하기도 한다.

이런 메타 문자들을 문자 클래스라고 부른다.

숫자와 숫자가 아닌 문자 찾기

메타 문자 설명 같은 표현
\d 숫자 하나( [0-9]
\D 숫자를 제외한 문자 하나 [^0-9]
public class code {
    public static void main(String[] args) {
        String regex = "\\\\D";
        Pattern pattern = Pattern.compile(regex);

        String[] strs = {
                "eric",
                "123456789"
        };

        for(String str : strs) {
            Matcher matcher = pattern.matcher(str);
            if (matcher.find()) {
                System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
            } else {
                System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
            }
        }
    }
}
/*
str 안에 \\D 문자열이 존재한다.
str 안에 \\D 문자열이 존재하지 않는다.
*/

영숫자 문자와 영숫자가 아닌 문자 찾기

영숫자 문자로, 대문자와 소문자를 포함한 알파벳 A부터 Z, 숫자, 밑줄을 포함한다.

메타 문자 설명 같은 표현
\w 대소문자와 밑줄을 포함하는 모든 영숫자 [a-zA-Z0-9_]
\W 영숫자나 밑줄이 아닌 모든 문자 [^a-zA-Z0-9_]
public class code {
    public static void main(String[] args) {
        String regex = "\\\\w";
        Pattern pattern = Pattern.compile(regex);

        String[] strs = {
                "123",
                "_",
                "abc",
                "ABC",
                "\\n\\t"
        };

        for(String str : strs) {
            Matcher matcher = pattern.matcher(str);
            if (matcher.find()) {
                System.out.println("str 안에 " + regex + " 문자열이 존재한다.");
            } else {
                System.out.println("str 안에 " + regex + " 문자열이 존재하지 않는다.");
            }
        }
    }
}
/*
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재한다.
str 안에 \\w 문자열이 존재하지 않는다.
*/

공백 문자와 공백이 아닌 문자 찾기

이번엔 살펴볼 분류는 공백 클래스다.

메타 문자 설명 같은 표현
\s 모든 공백 문자 [\f\n\r\t\v]
\S 공백 문자가 아닌 모든 문자 [^\f\n\r\t\v]

백스페이스 메타 문자인 [\b]는 포함되지 않는다.

16진수와 8진수 표현하기

  • 16진수 : \x
  • 8진수 : \0
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
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
29 30 31
글 보관함