[Java] 문자열 자르기(추출) - 정규표현식(Pattern, Matcher)

2021. 1. 4. 22:53Java

문자열을 정해져있는 구분자가 아닌 문자열 패턴으로 인식해서 자르기 또는 추출을 할 수 있는 방법이 있습니다.

정규표현식(Regular expressions)을 이용한 방법으로 정규식이라고 부르기도 합니다.

 

정규표현식을 이용하여 일정한 패턴을 지정하여 찾을 수 있습니다.

 

Pattern, Matcher 사용법

먼저 숫자만 추출하는 예제를 통해서 Pattern, Matcher 사용법을 알아보겠습니다.

String str = "2020-12-31, 2021/01/03";
Pattern p = Pattern.compile("([0-9])+");	// 검색할 문자열 패턴 : 숫자
Matcher m = p.matcher(str);			// 문자열 설정

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

// 출력
2020
12
31
2021
01
03

1. Pattern.complie() 함수에 검색할 문자열 패턴을 파라미터로 설정합니다. 현재 예제는 숫자만 검색하는 패턴을 설정하였습니다.

2. matcher() 함수에 원본 문자열을 파라미터로 설정하고 리턴값으로 Matcher 클래스를 받습니다. 

3. find() 함수로 검색결과가 존재하는지 확인할 수 있습니다. 패턴에 해당하는 서브문자열이 존재하면 true를 리턴합니다.

4. group() 함수로 검색한 서브문자열을 가져올 수 있습니다.

 

대괄호 사용법

대괄호를 사용하여 문자 패턴을 인식하는 것을 알아보겠습니다.

정규표현식에 나오는 괄호를 잘 사용하면 다양하고 복잡한 패턴을 인식할 수 있습니다.

표현식 설명
[abc] 대괄호 안에 있는 문자 1개 인식
a or b or c와 같음
[^abc] 대괄호 안에 있는 문자가 아닌 문자를 인식(NOT 연산)
a, b, c 이외의 문자
[0-9] 0부터 9까지의 범위 중 한 문자 인식
[a-zA-Z] 소문자, 대문자를 인식
[a-z&&[def]] a~z까지 1문자 and d/e/f 중 1글자 인식

 

 

표현식

정규식 패턴 안에서 사용가능한 주요 표현식 목록입니다.

표현식 설명
[ ] 문자의 집합 또는 범위를 나타냄
대괄호 안의 ^ 표시는 NOT을 뜻함
{ } 횟수 또는 범위를 나타낸다.
( ) 소괄호 안의 문자를 하나의 그룹으로 인식
. 임의의 한 문자
단, \는 넣을 수 없음
* 앞 문자가 0개 이상 존재
+ 앞 문자가 1개 이상 존재
? 앞 문자가 없거나 하나 존재
^ 문자열의 시작
$ 문자열의 종료
| 패턴 안에서 or 연산 수행
&& 패턴 안에서 and 연산 수행
\s 공백문자
\t\n\x0B\f\r
\S 공백 문자가 아닌 나머지 문자
[^\s]와 동일
\w 영숫자와 _(언더바)
[a-zA-Z_0-9]와 동일
\W 영숫자를 제외한 문자
[^\w]와 동일
\d 숫자
[0-9]와 동일
\D 숫자를 제외한 모든 문자
[^0-9]와 동일
\ 확장문자
\ 다음에 일반 문자가 오면 특수문자로 취급
(?i) 대소문자를 구분하지 않음

 

자세한 사용법은 다른 글에서 다양한 예제와 함께 알아보도록 하겠습니다.

 

관련글:

2020/12/28 - [Java] - [Java] 문자열 자르기 - 정규표현식(split)

 

[Java] 문자열 자르기 - 정규표현식(split)

정규식 개요 정규표현식이 뭔지 먼저 살펴보도록 하겠습니다. 정규표현식은 간단하게 얘기하면 특정한 규칙을 갖는 문자열을 뜻합니다. 줄여서 정규식이라고 합니다. 문자열 분할할 때 여러 구

smartpro.tistory.com

 

반응형