컴퓨터 과학(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. 정규표현식 연습 사이트
정규표현식을 연습할 때는 아래 사이트에서 테스트해 볼 수 있다: