본문으로 바로가기

[Java] 정규표현식 사용하는 방법

category TIL/Java 2022. 5. 7. 19:38

Pattern 클래스

정규 표현식이 컴파일된 클래스. 정규 표현식에 대상 문자열을 검증하거나, 활용하기 위해 사용되는 클래스

 

메소드 종류 의미
static Pattern compile(String regex) 주어진 정규식을 갖는 패턴을 생성
String pattern() 컴파일된 정규 표현식을 반환
Matcher matcher(CharSequence input) 패턴에 매칭할 문자열을 입력해 Matcher를 생성
static boolean matches(String regex, CharSequence input) 정규식과 문자열이 일치하는지 확인
String[] split(CharSequence input)
String[] split(CharSequence input, int limit)
패턴이 일치하는 항목을 중심으로 input을 분할
 limit - 1의 횟수만큼 패턴 일치를 시켜 문자열을 자름
   (문자열이 limit개 생성)

 만약 0이하라면 최대한 많이 적용

 

Matcher 클래스

Pattern클래스를 받아 대상 문자열과 패턴이 일치하는 부분을 찾거나 전체 일치 여부 등을 판별하기 위해 사용되는 클래스

 

메소드 종류 의미
Pattern pattern() matcher가 해석한 패턴을 반환
Matcher usePattern(Pattern newPattern) matcher가 사용할 Pattern을 변경
Matcher reset(CharSequence input) matcher가 분석할 문자열을 변경
int start() 매칭하는 문자열의 시작 인덱스를 반환
int start(int group) 매칭 문자열 중 group번째 문자열의 시작 인덱스를 반환
• 0은 그룹의 전체 패턴을 의미
   (start(0) = start())
int start(String name) 매칭 문자열 중 해당 name을 지정한 그룹의 시작 인덱스를 반환
int end() 일치하는 문자열의 마지막 문자열 이후 인덱스를 반환
int end(int group) 매칭 문자열 중 group번째 그룹의 마지막 문자열 이후(+1) 인덱스를 반환
• 0은 그룹의 전체 패턴을 의미
   (end(0) = end())
int end(String name) 매칭 문자열 중 해당 name을 지정한 그룹의 마지막 문자열 이후(+1) 인덱스를 반환
String group() 매치와 일치하는 문자열을 반환
String group(int group) 매칭되는 문자열 중 group번째 그룹의 문자열 반환
• 0은 그룹의 전체 패턴을 의미
   (group(0) = group())
String group(String name) 매칭되는 문자열 중 해당 name을 지정한 그룹의 문자열 반환
int groupCount() 패턴 내에 그룹핑한 개수(패턴에 있는 괄호 개수)를 반환
boolean matches() 패턴에 전체 문자열이 일치한 경우 true를 반환
boolean find() 패턴이 일치하는 다음 문자열을 탐색
 다음 문자열이 있다면 true
boolean find(int start) start 인덱스 이후부터 패턴에 일치하는 문자열을 탐색
String replaceAll(String replacement) 패턴과 일치하는 모든 문자열을 지정된 replacement로 변경

 

예시

  • 영문자만 포함하고 있는지 검사하여 출력
String regex = "^[a-zA-Z]$";
String input = "My major is computer science."

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

System.out.println(matcher.matches()); // false (∵공백 포함)

 

  • 패턴과 일치하는 문자열을 반복해서 추출
String regex = "^([0-9]+)([SDT])([*#]?)$";
String input = "1D2S#10S*";

Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);

while(matcher.find()){
	System.out.println(matcher.group());
}

// 1D
// 2S#
// 10S*

 


[ 출처 ]
https://girawhale.tistory.com/77