[Java] Java Matcher 클래스(자바 정규 표현식) - 사용법
반응형

정규표현식이란?

정규 표현식에 대한 개념은 이전 포스팅에서 확인..

2021.11.10 - [Back-end/Java] - [Java] Java Pattern 클래스(자바 정규 표현식) - 사용법

 

[Java] Java Pattern 클래스(자바 정규 표현식) - 사용법

정규표현식이란? 특정 규칙을 가진 문자열의 집합을 표현하기 위해 쓰이는 형식 언어 Ex) 전화번호, 이메일, 주민 번호 등! 개발할 때 형식대로 제대로 입력했는지 검증할 경우에 정규표현식을

diddl.tistory.com


Matcher 클래스

문자열의 패턴을 해석하고 주어진 패턴과 일치하는지 체크할 때 주로 사용.

Matcher객체는 Pattern객체의 matcher() 메소드를 호출해서 얻는다!!

 

* 선언 코드

import java.util.regex.Pattern;

- java.util.regex.Matcher import하면 사용할 수 있다.

 

* 객체 생성

아래 코드에서 보듯이 Pattern객체의 matcher메소드로 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); // Matcher 객체 생성
	}
}

 

 

Matcher 클래스 주요 Method

문자열과 패턴이 일치하는지 알려주는 - find()

  • public boolean find()
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class stringCheck {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("([\\d]{2,3}-([\\d]{3,4}-[\\d]{4}))");
        String INPUT = "My Phone number is 010-1234-5678.";

        Matcher matcher = pattern.matcher(INPUT); //Matcher 객체 생성
        System.out.println(matcher.find()); //패턴 일치하는지 검사해서 결과 반환!!
    }
}

대상 문자열과 패턴이 일치하는 경우 true를 반환하고, 그 위치로 이동

 

 

문자열과 패턴이 일치하는 위치에 대체 문자열로 대체하는 메소드 - appendReplacement()

  • public Matcher appendReplacement(StringBuffer sb, String replacement)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("a*b");
        String INPUT = "abccc-abccc-abccc";

        Matcher matcher = pattern.matcher(INPUT); //Matcher 객체 생성
        StringBuffer buffer = new StringBuffer();
        while(matcher.find()){
            matcher.appendReplacement(buffer, "!");//패턴을 찾아 !로 바꿔주기
        }
        matcher.appendTail(buffer);
        System.out.println(buffer);
    }
}

반복문을 돌며 matcher.find()로 문자열의 처음부터 매칭 되는 구간을 찾는다. appendReplacement() 함수를 이용하여 매칭되는 구간을 ! 문자로 대체했다.

반복문을 빠져 나와보면 appendTail() 이라는 함수가 있다. 해당 함수에 대해 알아보자

 

 

appendTail()

  • public Matcher appendTail(StringBuffer sb)

위 예제에서 반복문을 돌면서 a와 b로 구성된 문자열 부분을 !로 바꿔주며 버퍼에 저장한다.

그럼 반복문의 젤 마지막에서 어떻게 될까..?

appendReplacement() 함수는 패턴이 매칭 되는 부분까지 버퍼에 붙여 넣는다. 그렇기 때문에 반복문의 젤 마지막에서 문제가 발생한다. "!ccc-!ccc-abccc" 젤 마지막 부분에서 ab가 매칭되니 이 부분까지만 붙여 넣고 반복문이 종료되어 뒤의 ccc가 손실되는 것이다. 그래서 appendTail() 함수를 통해 꼬리 부분을 붙여주는 것이다.

이해가 잘 안간다면.. 위의 예제에서 appendTail() 부분을 주석 처리한 후 출력 결과를 보면 이해가 갈 것이다.

 

 

group()

  • public String group([int group | string name])

매칭된 부분을 반환한다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class test {
    public static void main(String[] args) {
        Pattern pattern = Pattern.compile("a*b");
        String INPUT = "abccc-abccc-abccc";

        Matcher matcher = pattern.matcher(INPUT); //Matcher 객체 생성

        while(matcher.find()){
            System.out.println(matcher.group()); //일치하는 부분 반환, 출력
        }
    }
}

결과는 당연히..

ab

ab

ab

가 순서대로 출력 된다.

반응형