Files
java-examples/docs/Regex.md

6.0 KiB

자바 정규 표현식(Regex) 쉽게 배우기

자바에서는 정규 표현식(Regex)을 문자열 검색, 패턴 매칭, 텍스트 변환 등에 사용할 수 있다.
정규 표현식을 활용하면 복잡한 문자열을 간단한 패턴으로 처리할 수 있다.

자바에서 정규 표현식을 다룰 때 주로 사용하는 클래스는 PatternMatcher이다.
또한, String 클래스에서도 정규 표현식을 지원하는 몇 가지 메서드가 있다.


1. 주요 클래스 및 메서드 정리

(1) Pattern 클래스 (정규식 컴파일)

메서드 설명
Pattern.compile(String regex) 정규식을 컴파일하여 Pattern 객체 생성
Pattern.matches(String regex, CharSequence input) 전체 문자열이 정규식과 일치하는지 확인
pattern() 정규식을 문자열 형태로 반환
split(CharSequence input) 정규식을 기준으로 문자열을 분리
matcher(CharSequence input) Matcher 객체를 생성하여 세부적인 패턴 검색 수행

사용 예시:

Pattern pattern = Pattern.compile("\\d+"); // 숫자 찾기
Matcher matcher = pattern.matcher("abc123");

System.out.println(matcher.find()); // true

(2) Matcher 클래스 (패턴 검색)

메서드 설명
find() 정규식과 일치하는 부분이 있는지 확인
matches() 전체 문자열이 정규식과 일치하는지 확인
lookingAt() 문자열의 시작 부분이 정규식과 일치하는지 확인
group() 최근에 매칭된 문자열을 반환
group(int group) 특정 그룹의 매칭 결과를 반환
start() 매칭된 문자열의 시작 인덱스 반환
end() 매칭된 문자열의 끝 인덱스 반환
replaceAll(String replacement) 모든 매칭된 부분을 대체
replaceFirst(String replacement) 첫 번째 매칭된 부분만 대체

사용 예시:

Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("abc123xyz456");

while (matcher.find()) {
    System.out.println("찾은 숫자: " + matcher.group());
}

출력 결과:

찾은 숫자: 123
찾은 숫자: 456

find()를 사용하면 여러 번 매칭 가능.


(3) String 클래스의 정규 표현식 관련 메서드

메서드 설명
matches(String regex) 전체 문자열이 정규식과 일치하는지 확인
split(String regex) 정규식을 기준으로 문자열을 분리하여 배열 반환
replaceAll(String regex, String replacement) 모든 매칭된 부분을 대체
replaceFirst(String regex, String replacement) 첫 번째 매칭된 부분만 대체

사용 예시:

String text = "apple,banana,grape";
String[] fruits = text.split(",");

for (String fruit : fruits) {
    System.out.println(fruit);
}

출력 결과:

apple
banana
grape

split()을 사용하면 쉼표(,)를 기준으로 문자열을 쉽게 분리할 수 있다.


2. 정규 표현식 쉽게 설명하기

정규 표현식은 특정한 패턴을 가진 문자열을 검색하고, 추출하고, 변환할 수 있는 도구이다.
아래는 자주 사용하는 정규 표현식 패턴이다.

정규식 설명 예제
. 임의의 한 글자 a.b → "acb", "a1b" (O) / "ab", "acdb" (X)
\d 숫자 (0-9) \d+ → "123", "4567"
\D 숫자가 아닌 문자 \D+ → "abc", "!@#"
\w 알파벳, 숫자, _ \w+ → "hello_123"
\W 알파벳, 숫자, _ 제외한 문자 \W+ → "!@#"
\s 공백 (스페이스, 탭, 줄바꿈) \s+ → " "
\S 공백이 아닌 문자 \S+ → "Hello"
^ 문자열의 시작 ^abc → "abcdef" (O) / "zabc" (X)
$ 문자열의 끝 xyz$ → "abcxyz" (O) / "xyzabc" (X)
* 0개 이상 반복 a* → "", "a", "aa", "aaaa"
+ 1개 이상 반복 a+ → "a", "aa", "aaaa" (O) / "" (X)
? 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. 자주 쓰는 정규식 예제

(1) 이메일 검증

String regex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$";
String email = "test@example.com";

boolean isValid = Pattern.matches(regex, email);
System.out.println("이메일 검증: " + isValid); // true

→ 이메일 형식인지 확인할 때 사용.


(2) 전화번호 검증 (010-xxxx-xxxx)

String regex = "^010-\\d{4}-\\d{4}$";
String phone = "010-1234-5678";

boolean isValid = Pattern.matches(regex, phone);
System.out.println("전화번호 검증: " + isValid); // true

010-xxxx-xxxx 형식의 전화번호인지 확인.


(3) 숫자만 포함된 문자열 체크

String regex = "^\\d+$";
String input = "123456";

boolean isNumber = Pattern.matches(regex, input);
System.out.println("숫자만 포함?: " + isNumber); // true

→ 숫자로만 이루어진 문자열인지 검증할 때 사용.


(4) 특정 문자 제거 (replaceAll())

String text = "Hello123World";
String result = text.replaceAll("\\d", ""); // 숫자 제거

System.out.println(result); // "HelloWorld"

→ 숫자(\d)를 찾아서 제거.


4. 정리

정규 표현식을 사용하면 복잡한 문자열 처리를 간단하게 해결 가능!
Pattern & Matcher 클래스를 사용하면 세부적인 패턴 매칭이 가능!
String 클래스에서도 matches(), split(), replaceAll() 등을 활용할 수 있음!

즉, 자바의 정규 표현식 API를 잘 활용하면 문자열 검색, 치환, 검증이 훨씬 쉬워진다!