본문 바로가기
Old Posts/Java

[Java] 정규표현식 사용법 및 예제 - Pattern, Matcher

by A6K 2021. 6. 28.

자바에서 정규표현식(Regular Expression)'을 사용해보자.

1. 정규표현식(Regular Expression)

정규표현식 혹은 정규식은 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 언어다. 정규 표현식은 텍스트 편집기나 스크립트 언어에서 문자열의 검색과 치환을 위해 지원하고 있다. 특히 Perl 같은 스크립트 언어는 언어 자체에서 강력한 정규표현식을 구현하고 있어, 문자열, 텍스트 처리에 특화된 스크립트를 작성할 수 있다.

자바 역시 프로그래머가 정규표현식을 사용할 수 있도록 여러가지 유틸을 제공하고 있다.

2. 자바 정규표현식

자바 프로그래밍에서 정규표현식을 작성하기 위해서 java.util.regex 패키지에 있는 클래스들을 사용하면 된다. 주로 Pattern 클래스와 Matcher 클래스가 사용된다.

2.1 Pattern 클래스

java.util.regex.Pattern 클래스는 matches() 메소드를 지원한다. 이 메소드를 이용해서 특정 문자열이 주어진 정규식에 매칭되는지를 테스트해볼 수 있다.

String pattern = "^[0-9]*$"; // 숫자만 등장하는지
String str = "123321"; 

boolean result = Pattern.matches(pattern, str);
System.out.println(result); // true

matches() 메소드의 첫 번째 인자는 정규 표현식이고, 두 번째 인자는 정규표현식이 매칭되는지 확인하고자하는 문자열이다. 만약 문자열이 정규표현식에 매칭되면 true가 리턴되고 그렇지 않으면 false가 리턴된다.

그 밖에 Pattern 클래스는 다양한 메소드를 지원한다.

compile(String regex); 주어진 정규표현식으로부터 패턴 생성
matcher(CharSequence input); 대상 문자열이 패턴과 일치할 경우 true 반환
asPredicate(); 문자열을 일치시키는데 사용할 수 있는 Predicate 작성
pattern(); 컴파일된 정규표현식을 String 형태로 변환
split(CharSequence input); 문자열을 주어진 인자값 CharSequence 패턴에 따라 분리

2.2 Matcher 클래스

Matcher 클래스는 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 체크할 때 주로 사용한다. Pattern 클래스와 마찬가지로 Matcher 클래스는 생성자가 없다. Matcher 객체는 Pattern 객체의 matcher() 메소드를 호출해서 얻는다.

Pattern pattern = Pattern.compile("^[0-9]*$");
String str = "04234234";

Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find());

pattern 객체의 matcher() 메소드를 호출해서 얻어온 Matcher 클래스를 이용한 코드다. Matcher 클래스에는 다양한 메소드가 정의되어 있다.

matches() 대상 문자열과 패턴이 일치하는 경우 true 반환
find() 대상 문자열과 패턴이 일치하는 경우 true 반환하고 그 위치로 이동
find(int start) start 인자로 받은 위치부터 매칭 체크
start() 매칭되는 문자열의 시작 위치를 반환
start(int group) 지정된 그룹이 매칭되는 시작위치 반환
end() 매칭되는 문자열의 끝 바로 다음 위치를 반환
end(int group) 지정된 그룹이 매칭되는 끝 바로 다음 문자 위치를 반환
group() 매칭된 부분 반환
group(int group) 매칭된 부분 중 group번째 그루핑 매칭부분을 반환
groupCount() 패턴내 그룹핑한 전체 갯수를 반환

3. 정규표현식 문법

^ 문자열의 시작
$ 문자열의 끝
. 임의의 한 문자
* 문자가 0번 이상 발생
+ 문자가 1번 이상 발생
? 문자가 0번 혹은 1번 발생
[ ]  문자의 집합 범위를 나타냄
[0-9] : 숫자 (0부터 9)
[a-z] : 알파벳 (a부터 z)

앞에 ^가 나타나면 not을 의미
{ }  횟수 또는 범위를 의미
( )  소괄호 안의 문자를 하나의 문자로 인식
|  or 조건
\ 확장 문자의 시작 
\b 단어의 경계
\B 단어가 아닌 것의 경계
\A 입력의 시작부분
\G 이전 매치의 끝
\Z 입력의 끝이지만 종결자가 있는 경우
\z 입력의 끝
\s 공백문자
\S 공백문자가 아닌 나머지 문자
\w 알파벳이나 숫자
\W 알파벳이나 숫자를 제외한 문자
\d [0-9]와 동일
\D 숫자를 제외한 모든 문자

3.1 자주사용하는 정규표현식

^[0-9]*$ 숫자
^[a-zA-Z]*$ 영문자
^[가-힣]*$ 한글
\\w+@\\w+\\.\\w+(\\.\\w+)? 이메일 주소
^\d{2,3}-\d{3,4}-\d{4}$ 전화번호
^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$ 핸드폰 번호
\d{6} \- [1-4]\d{6} 주민등록 번호
^\d{3}-\d{2}$ 우편번호

 

댓글