본문으로 바로가기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.



자바 정규표현식 Pattern, Matcher


자바에서 정규식을 사용하기 위해서는 Pattern, Matcher 클래스 객체가 필요합니다. 문자열로 정의한 정규 표현식을 Pattern 객체로 만들기 위해 Pattern 클래스의 compile() 메소드를 사용합니다. 컴파일된 패턴은 Matcher 객체를 만드는 데 사용되며, Matcher객체는 임의의 입력 문자열이 패턴에 부합되는지 여부를 판가름하는 기능을 가지고 있습니다. Pattern 객체들은 비상태 유지 객체들이기 때문에 여러 개의 Matcher 객체들이 공유할 수 있습니다.


Pattern 

Pattern 객체는 Perl 문법과 비슷한 형태로 정의된 정규표현식을 나타냅니다.

문자열로 정의한 정규표현식은 사용되기 전에 반드시 Pattern 클래스의 인스턴스로 컴파일되어야 합니다. 컴파일된 패턴은 Matcher 객체를 만드는 데 사용되며, Matcher 객체는 임의의 입력 문자열이 패턴에 부합되는 지 여부를 판가름하는 기능을 담당합니다. 또한 Pattern 객체들은 비상태유지 객체들이기 때문에 여러 개의 Matcher 객체들이 공유할 수 있습니다.



Pattern클래스 주요 메서드

 Name

 Description 

 static Pattern compile(String regex) 

 어진 정규표현식으로부터 패턴을 만들어낸다(이를 ‘컴파일 한다’고 표현한다). 

 static Matcher matcher (CharSequence input)

 입력 캐릭터 시퀀스에서 패턴을 찾는 Matcher 객체를 만든다. 

 String pattern()

 컴파일된 정규표현식을 String 형태로 반환한다. 

 String split(CharSequence input)

 주어진 입력 캐릭터 시퀀스를 패턴에 따라 분리한다.

 static boolean matches

(String regex, CharSequence input)

 주어진 정규식으로 컴파일하고, 주어진 문자열이 규칙에 부합되는지 여부를 확인한다.


Pattern에서 사용되는 상수 값

 Name

 Description 

 Pattern.CASE_INSENSITIVE

 대소문자를 구분하지 않는다. 

 Pattern.COMMENTS

 패턴에 코멘트(comment)와 공백 문자를 허용한다. 

 Pattern.DOTALL 

 Dotall 모드를 사용한다. 

 Pattern.MULTILINE 

 멀티라인 모드를 사용한다. 

 Pattern.UNIX_LINES 

 유닉스 라인 모드를 사용한다. 


Matcher

Matcher 객체는 특정한 문자열이 주어진 패턴과 일치하는가를 알아보는데 이용됩니다. Matcher 클래스의 입력값으로는 CharSequence라는 새로운 인터페이스가 사용되는데 이를 통해 다양한 형태의 입력 데이터로부터 문자 단위의 매칭 기능을 지원 받을 수 있습니다. 기본적으로 제공되는 CharSequence 객체들은 CharBuffer, String, StringBuffer 클래스가 있습니다. Matcher 객체는 Pattern 객체의 matcher 메소드를 통해 받아올 수 있습니다


Matcher 객체가 일단 만들어지면 주로 세 가지 목적으로 사용됩니다.

  • 1) 주어진 문자열 전체가 특정 패턴과 일치하는 가를 판단(matches).
  • 2) 주어진 문자열이 특정 패턴으로 시작하는가를 판단(lookingAt).
  • 3) 주어진 문자열에서 특정 패턴을 찾아낸다(find).
  • 5) 특정 문자열을 찾아 새로운 문자열로 교체하는 기능도 제공된다.



Matcher클래스 주요 메서드

 Name

 Description 

 boolean matches() 

 주어진 문자열 전체가 특정 패턴과 일치하는가를 판단한다. 

 boolean lookingAt() 

 주어진 문자열이 특정 패턴으로 시작하는가를 판단한다. 

 boolean find()  

 주어진 문자열에서 특정 패턴을 찾아낸다. 

 boolean find(int start) 

 Start 위치 이후부터 매칭 검사를 수행한다. 

 int start() 

 매칭되는 문자열 끝 다음 문자 위치를 반환한다. 

 int start(int group) 

 지정된 그룹이 매칭되는 시작 위치를 반환한다. 

 int end 

 매칭되는 문자열 끝 다음 문자 위치를 반환한다.

 int end(int group) 

 지정된 그룹이 매칭되는 끝 다음 문자 위치를 반환한다. 

 String group() 

 매칭된 부분을 반환한다. 

 String group(int group)

 매칭된 부분 중 group 번째 매칭 부분을 반환한다. 

 String replaceAll(String replacement) 

 패턴과 일치되는 부분을 replacement로 대체한다. 

 String replaceFirst(String replacement) 

 패턴과 일치되는 첫 번째 문자열을 replacement로 대체한다. 

 Matcher appendReplacement
(StringBuffer sb, String replacement) 

 일치되는 패턴이 나타날 때까지 모든 문자들을 버퍼(sb)로 옮기고, 패턴에 일치되는 문자열은 두 번째 파라미터인 replacement 문자열로 대체한다. 

 StringBuffer appendTail(StringBuffer sb) 

 캐릭터 시퀀스의 현재 위치 이후의 문자들을 버퍼(sb)에 복사해 넣는다. 


자바 정규표현식의 간단 설명

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

public class Test {
    private static Pattern p = null;
    private static Matcher m = null;
    private static final String ONLY_NUM_PATTERN = "^[0-9]+$";
    private static final String FILE_PATTERN = "^\\S+.(?i)(txt|pdf|hwp|xls)$";

    public static boolean numCheck(String str) {
        p = Pattern.compile(ONLY_NUM_PATTERN);
        m = p.matcher(str);
        
        return m.find();
    }
    
    public static boolean fileCheck(String str) {
        p = Pattern.compile(FILE_PATTERN);
        m = p.matcher(str);
        
        return m.find();
    }
    
    public static void main(String[] args) {
        System.out.println(numCheck("123123123"));      //true
        System.out.println(numCheck("1231--23123"));    //false     
        System.out.println(numCheck("a23123"));         //false
        
        System.out.println(fileCheck("a23123"));        //false
        System.out.println(fileCheck("ktko.txt"));      //true
        System.out.println(fileCheck("ktko.pdf"));      //true
        System.out.println(fileCheck("ktko.xls"));      //true
        System.out.println(fileCheck("ktko.jpeg"));     //false
    }
}


정규표현식으로부터 패턴을 만듭니다.

p = Pattern.compile(ONLY_NUM_PATTERN);


만들어진 패턴에 정규표현식에 대입될 문자열을 입력하여 Matcher객체를 생성합니다.

m = p.matcher(str);


대입된 문자열에서 특정 패턴을 찾습니다.

m.find();