컴퓨터 과학(CS)

정규 표현식(Regex)

kchs0529 2025. 3. 26. 16:28

정규표현식(Regular Expression)이란?

정규표현식(Regex, Regular Expression)은 문자열에서 특정한 패턴을 찾거나, 변경하거나, 추출하는 데 쓰인다. 예를 들어, 이메일 주소를 검증하거나 특정 형식의 날짜를 찾을 때 정규표현식을 활용할 수 있다.


1. 정규표현식 기본 문법

1) 기초 문자

기호 의미 예시 매칭 결과

기호 의미 예시 매칭결과
. 임의의 문자(한 글자) a.b "acb", "a3b" 등
\d 숫자(0~9) \d\d "23", "09" 등
\w 문자 또는 숫자 (a-z, A-Z, 0-9, _) \w+ "hello", "test123" 등
\s 공백(스페이스, 탭, 줄바꿈) \s+ " ", " ", "\n" 등
\D 숫자가 아닌 문자 \D+ "abc", "#!" 등
\W 문자 또는 숫자가 아닌 문자 \W+ "!@#", " " 등

2) 반복 및 개수 제한

기호 의미 예시 매칭 결과

기호 의미 예시 매칭결과
* 0개 이상 반복 a* "", "a", "aaa" 등
+ 1개 이상 반복 a+ "a", "aaa" 등
? 0개 또는 1개 a? "", "a"
{n} 정확히 n개 반복 a{3} "aaa"
{n,} n개 이상 반복 a{2,} "aa", "aaa", "aaaa" 등
{n,m} n개 이상 m개 이하 반복 a{2,4} "aa", "aaa", "aaaa"

 


3) 문자 클래스(선택)

기호 의미 예시 매칭 결과

기호 의미 예시 매칭결과
[abc] a, b, c 중 하나 [abc] "a", "b", "c"
[^abc] a, b, c를 제외한 모든 문자 [^abc] "d", "x", "1" 등
[a-z] a부터 z까지의 소문자 [a-z] "b", "m", "z" 등
[A-Z] A부터 Z까지의 대문자 [A-Z] "B", "M", "Z" 등
[0-9] 0부터 9까지의 숫자 [0-9] "3", "7", "9" 등
[a-zA-Z0-9] 영문 대소문자 + 숫자 [a-zA-Z0-9] "A", "b", "3" 등

4) 위치 지정

기호 의미 예시 매칭 결과

기호 의미 예시 매칭결과
^ 문자열의 시작 ^abc "abc"로 시작하는 문자열
$ 문자열의 끝 xyz$ "xyz"로 끝나는 문자열
\b 단어의 경계 \bword\b "word", "word!" (단어 단위로 검색)

2. 정규표현식 활용 예제

1) 이메일 주소 검사

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$

✔️ test@example.com ✅
❌ test@.com ❌

2) 전화번호 검사 (한국)

^01[016789]-\d{3,4}-\d{4}$

✔️ 010-1234-5678 ✅
❌ 011-12-5678 ❌

3) 주민등록번호 검사

^\d{6}-[1-4]\d{6}$

✔️ 990101-1234567 ✅
❌ 12345-6789012 ❌

 


3. 자바에서 정규표현식 사용하기

자바에서는 java.util.regex 패키지를 사용해서 정규표현식을 다룰 수 있다. Pattern과 Matcher 클래스를 활용하면 문자열에서 특정 패턴을 찾거나 검증할 수 있다.

1) 기본적인 정규표현식 매칭

import java.util.regex.*;

public class RegexExample {
    public static void main(String[] args) {
        String text = "이메일: test@example.com";
        String regex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}";

        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(text);

        if (matcher.find()) {
            System.out.println("찾은 이메일: " + matcher.group());
        } else {
            System.out.println("이메일을 찾을 수 없음");
        }
    }
}

2) 문자열 치환하기

public class RegexReplaceExample {
    public static void main(String[] args) {
        String text = "전화번호: 010-1234-5678";
        String regex = "\\d{3}-\\d{4}-\\d{4}";
        
        String maskedText = text.replaceAll(regex, "***-****-****");
        System.out.println(maskedText);
    }
}

출력 결과:

전화번호: ***-****-****

4. 정규표현식 연습 사이트

정규표현식을 연습할 때는 아래 사이트에서 테스트해 볼 수 있다: