[기술정리] 정규표현식

silver's avatar
Jan 07, 2025
[기술정리] 정규표현식
정규표현식(Regex, Regular Expression)은 문자열에서 특정한 패턴을 찾거나 치환하는 데 사용된다. Java에서는 String 클래스의 matches(), split(), replaceAll(), Pattern 및 Matcher 클래스를 사용하여 정규표현식을 다룰 수 있다.

1. 기본 특수문자

 
• . → 임의의 한 문자(개행 제외)
• 예: "a.b"는 "acb", "a1b"에 매칭됨
• ^ → 문자열의 시작
• 예: "^hello"는 "hello world"에서 시작할 때만 매칭
• $ → 문자열의 끝
• 예: "world$"는 "hello world"에서 "world"로 끝나야 매칭
• * → 앞 문자가 0번 이상 반복
• 예: "ab*c"는 "ac", "abc", "abbc"에 매칭됨
• + → 앞 문자가 1번 이상 반복
• 예: "ab+c"는 "abc", "abbc"에 매칭되지만 "ac"는 매칭되지 않음
• {n} → 앞 문자가 정확히 n번 반복
• 예: "a{3}"는 "aaa"에만 매칭됨
• {n,} → 앞 문자가 n번 이상 반복
• 예: "a{2,}"는 "aa", "aaa", "aaaa"에 매칭됨
• {n,m} → 앞 문자가 n~m번 반복
• 예: "a{2,4}"는 "aa", "aaa", "aaaa"에 매칭됨
 

2. 문자 클래스 (Character Class)

 
• [abc] → a, b, c 중 하나 • [^abc] → a, b, c 제외한 문자 • [a-z] → 소문자 a~z 중 하나 • [A-Z] → 대문자 A~Z 중 하나 • [0-9] → 숫자 0~9 중 하나 • [a-zA-Z0-9] → 영문자 및 숫자 중 하나
 

3. 공백 및 특수문자

• \s → 공백(스페이스, 탭, 줄바꿈 등)
• \S → 공백이 아닌 문자
• \d → 숫자 ([0-9]와 동일)
• \D → 숫자가 아닌 문자 ([^0-9]와 동일)
• \w → 영문자+숫자+언더스코어 ([a-zA-Z0-9_])
• \W → 영문자+숫자+언더스코어 아닌 것
 

4. 자주 쓰는 정규식

 
전화번호 형식(000-0000-0000)
^\d{3}-\d{4}-\d{4}$
이메일 형식
^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$
HTTP/HTTPS URL 형식
https?://[^\s]+
6~12자 영어+숫자 비밀번호
^[A-Za-z0-9]{6,12}$
정확히 5글자 단어 찾기
\b[a-zA-Z]{5}\b
 

5. Java에서 정규표현식 사용법

 1) split()

String text = "Hello world! Java is great."; String[] words = text.split("\\s+"); // 공백 기준으로 분리 System.out.println(Arrays.toString(words));

2) matches() 예제 (전화번호 검증)

String phoneNumber = "010-1234-5678"; boolean isValid = phoneNumber.matches("^\\d{3}-\\d{4}-\\d{4}$"); System.out.println(isValid); // true

3) replaceAll() 예제 (특수문자 제거)

String input = "Hello! @Java#123"; String cleanText = input.replaceAll("[^a-zA-Z0-9 ]", ""); System.out.println(cleanText); // "Hello Java123"

4) Pattern과 Matcher 사용 예제

import java.util.regex.*; public class RegexExample { public static void main(String[] args) { String text = "My email is example@email.com"; Pattern pattern = Pattern.compile("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}"); Matcher matcher = pattern.matcher(text); if (matcher.find()) { System.out.println("이메일 찾음: " + matcher.group()); } } }
 

정리

💡
• . → 모든 문자 (개행 제외) • ^, $ → 문자열 시작과 끝 • *, +, {n,m} → 반복 • \\s, \\d, \\w → 공백, 숫자, 영문자 • [abc], [a-z] → 특정 문자 포함 • Java에서 split(), matches(), replaceAll(), Pattern 활용 가능
Share article

silver