패턴 매칭(Pattern Matching)이란?
패턴 매칭은 문자열 데이터에서 특정 규칙(패턴)을 사용하여 원하는 부분을 추출하거나 확인하는 기술입니다. 주로 정규 표현식(Regualr Expression)을 활용하며 문자열을 분해, 분석, 검증하는 데 널리 사용된다.
패턴 매칭의 동작 방식
패턴 매칭은 두 가지 주요 단계로 이루어진다.
패턴 정의
정규 표현식으로 문자열의 구조를 정의합니다.
예를 들어, (\d{1, 2})([SDT])([*#]?)는 다트 점수 문자열에서 숫자, 보너스, 옵션을 추출하기 위한 패턴이다.
패턴 적용
문자열과 정규식을 비교하며 패턴과 일치하는 부분을 추출하거나 매칭 결과를 반환한다.
패턴 매칭의 활용
자바에서는 java.util.regex 패키지의 pattern 클래스와 Matcher 클래스를 통해 패턴 매칭을 수행한다.
주요 클래스
pattern 클래스
정규 표현식을 컴파일하여 패턴 객체를 생성한다.
주요 메서드
compile(String regex): 정규식을 컴파일하여 패턴 객체를 반환
matcher(CharSequence input): 패턴에 대한 매처(Matcher)를 생성.
Matcher 클래스
패턴과 입력 문자열 간의 매칭 작업을 수행한다.
주요 메서드
find(): 입력 문자열에서 일치하는 부분을 검색
group(): 매칭된 결과를 반환
matches(): 전체 문자열이 패턴과 일치하는지 확인
groupCount(): 패턴에서 정의된 그룹 수를 반환
정규 표현식 예제
정규식: (\d{1, 2})([SDT])([*#]?)
Pattern pattern = Pattern.compile("(\\d{1,2})([SDT])([*#]?)");
(\d{1, 2})
\d: 숫자(0~9)
{1, 2}: 1자리 또는 2자리 숫자
그룹으로 감싸져 있는 숫자를 추출 가능
([SDT])
[]: 문자 집합
S, D, T 중 하나와 매칭
그룹으로 감싸져 있어 보너스를 추출 가능
([*#]?)
*또는 # 중 하나
?: 0개 또는 1개만 허용
옵션이 없는 경우에도 매칭 가능
입력 문자열 매칭: "1S2D*3T"
매칭 결과
1. 그룹 1: 1, 그룹 2: S, 그룹 3: 없음("")
2. 그룹 1: 2, 그룹 2: D, 그룹 3: *
3. 그룹 1: 3. 그룹 2: T, 그룹 3: 없음("")
예제 코드
import java.util.regex.*;
public class PatternMatchingExample {
public static void main(String[] args) {
// 패턴 정의
String regex = "(\\d{1,2})([SDT])([*#]?)";
Pattern pattern = Pattern.compile(regex);
// 입력 문자열
String input = "1S2D*3T";
// 매처 생성
Matcher matcher = pattern.matcher(input);
// 매칭 결과 출력
while (matcher.find()) {
System.out.println("전체 매칭: " + matcher.group(0));
System.out.println("점수: " + matcher.group(1));
System.out.println("보너스: " + matcher.group(2));
System.out.println("옵션: " + matcher.group(3));
}
}
}
출력 결과
전체 매칭: 1S
점수: 1
보너스: S
옵션:
전체 매칭: 2D*
점수: 2
보너스: D
옵션: *
전체 매칭: 3T
점수: 3
보너스: T
옵션:
장점
1. 효율적인 문자열 처리:
복잡한 문자열 분석을 간결하고 효율적으로 수행.
2. 다양한 패턴 표현 가능:
숫자, 문자, 특수문자, 반복 등 복잡한 구조를 하나의 정규식으로 정의.
3. 재사용 가능:
한 번 컴파일된 Pattern 객체는 여러 입력 문자열에 사용할 수 있음.
단점
1. 가독성 문제:
정규 표현식이 복잡해지면 읽기 어렵고 유지보수 힘듦.
2. 학습 곡선:
정규 표현식의 문법과 활용법을 익히는 데 시간이 필요.
활용 사례
1. 로그 분석:
서버 로그에서 특정 이벤트를 추출.
2. 데이터 검증:
이메일, 전화번호, URL 등 데이터 형식 확인.
3. 문자열 변환:
텍스트 데이터에서 특정 패턴을 찾아 변환.
'Java 문법정리 (Array부터)' 카테고리의 다른 글
동등성, 동일성 (0) | 2024.08.09 |
---|---|
Enum (0) | 2024.08.01 |
Interface (0) | 2024.07.31 |
Calendar(java 8이후는 java.time) (0) | 2024.07.26 |
기본형 매개변수, 참조형 매개변수 (2) | 2024.07.23 |