📗 Docs

[Java] Pattern, Matcher, 정규식

파일과 미디어
date
Apr 20, 2023
slug
Java-Pattern
author
status
Public
tags
Java
Blog
summary
Java pattern, matcher 정규식 기본 개념
type
Post
thumbnail
category
📗 Docs
updatedAt
Apr 24, 2023 06:33 PM

자주 사용하는 정규식 표현

정규 표현식
설명
^[0-9]*$
숫자
^[a-zA-Z]*$
영문자
^[가-힣]*$
한글
\\w+@\\w+\\.\\w+(\\.\\w+)?
E-Mail
^\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}$
우편번호
 
^
문자열 시작
$
문자열 종료
.
임의의 한 문자(단 \은 넣을 수 없음)
*
앞 문자가 없을 수도 무한정 많을 수도 있음
+
앞 문자가 하나 이상
?
앞 문자가 없거나 하나 있음
[ ] 
문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타냅니다. [] 내에서 ^ 가 선행하여 존재하면 not을 나타낸다.
{ } 
횟수 또는 범위를 나타냅니다.
( )
소괄호 안의 문자를 하나의 문자로 인식
|
패턴 안에서 or 연산을 수행할 때 사용
\
정규 표현식 역슬래시(\)는 확장문자 (역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미)
\b
단어의 경계
\B
단어가 아닌것에 대한 경계
\A
입력의 시작 부분
\G
이전 매치의 끝
\Z
입력의 끝이지만 종결자가 있는 경우
\z
입력의 끝
\s
공백 문자
\S
공백 문자가 아닌 나머지 문자
\w
알파벳이나 숫자
\W
알파벳이나 숫자를 제외한 문자
\d
숫자 [0-9]와 동일
\D
숫자를 제외한 모든 문자
(?i)
앞 부분에 (?!)라는 옵션을 넣어주게 되면 대소문자는 구분하지 않습니다.

정규표현식 작성 방법

자바에서 정규표현식을 사용할때에는 java.util.regex 패키지 안에 있는 Pattern 클래스와 Matcher클래스를 주로 사용한다.
 

Pattern 클래스

Pattern클래스의 matches()메소드를 활용하여 검증할 수 있다. 다음 메서드의 첫번째 매개값은 정규표현식이고 두번째 매개값은 검증 대상 문자열이다.
import java.util.regex.Pattern;

public class RegexExample {
	public static void main(String[] args)  {
    
            String pattern = "^[0-9]*$"; //숫자만
            String val = "123456789"; //대상문자열
						String val2 = "!@#12345"; //대상문자열
        
            boolean regex1 = Pattern.matches(pattern, val);
						boolean regex2 = Pattern.matches(pattern, val2);
            System.out.println(regex1); // -> true 반환 
						System.out.println(regex2); // -> false 반환 
    }
}
 

Pattern 클래스 주요 메서드

Patter.compile(Stirng regex)
주어진 정규표현식으로부터 패턴을 만듬
Patttern.matcher(regex, value)
대상 문자열이 패턴과 일치할 여부에 따라 true 또는 false를 반환한다.
asPredicate()
문자열을 일치시키는 데 사용할 수 있는 술어를 작성한다.
pattern()
컴파일된 정규표현식 String 형태로 반환한다
split(CharSequence input)
문자열을 주어진 인자값 CharSequence 패턴에 따라 분리한다.

Matcher 클래스

Matcher 클래스는 대상 문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 판별할 때 주로 사용된다. Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위 매칭 기능을 지원받을 수 있다. Matcher 객체는 Pattern객체의 matcher() 메소드를 호출하여 받아올 수 있다.
. 

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
	public static void main(String[] args)  {
            Pattern pattern = Pattern.compile("^[a-zA-Z]*$"); //영문자만
            String val = "abcdef"; //대상문자열
	
            Matcher matcher = pattern.matcher(val);
            System.out.println(matcher.find()); //Pattern.matcher와 동일하네 true/fals반환
	}
}
 

Matcher 클래스 주요 메서드

matcher()
대상 문자열과 패턴이 일치할 경우 true 반환 == matcher.find()
find()
대상 문자열과 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동합니다.
find(start)
start위치 이후부터 매칭검색을 수행합니다.
start()
매칭되는 문자열 시작위치를 반환한다.
start(int group)
지정된 그룹이 매칭되는 시작 위치를 반환한다.
end()
매칭되는 문자열 긑 다음 문자위치를 반환한다.
end(int group)
지정된 그룹이 매칭되는 끝 다음 문자위치를 반환한다.
group()
매칭된 부분을 반환한다.
group(int group)
매칭된 부분중 group번 그룹핑 매칭부분을 반환한다.