정규표현식(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); // true3) 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