본문 바로가기
카테고리 없음

자바 정규 표현식 (Pattern, Matcher) 사용법 & 예제

by kangs' tong 2023. 8. 27.

자바 정규 표현식 (Pattern, Matcher) 사용법 & 예제

정규 표현식이란?

정규 표현식은 문자열의 패턴을 표현하는데 사용되는 특수 문자열입니다. 정규 표현식은 문자열의 검색, 추출, 치환 등 다양한 작업에 사용될 수 있습니다. 자바에서는 java.util.regex 패키지에서 제공되는 Pattern과 Matcher 클래스를 사용하여 정규 표현식을 처리할 수 있습니다. 이 포스팅에서는 이러한 클래스들의 사용법과 예제를 소개하도록 하겠습니다.

Pattern 클래스

Pattern 클래스는 정규 표현식 패턴을 컴파일하고 관리하는데 사용됩니다. 패턴을 컴파일한 후에는 Matcher 클래스를 사용하여 문자열에 대한 패턴 매칭 작업을 수행할 수 있습니다. 아래는 Pattern 클래스의 주요한 메소드들입니다.

compile()

public static Pattern compile(String regex)

주어진 정규 표현식으로 패턴을 컴파일합니다.

matches()

public boolean matches()

패턴이 주어진 문자열과 일치하는지 확인합니다. 일치하는 경우 true를 반환하고, 그렇지 않은 경우 false를 반환합니다.

split()

public String[] split(CharSequence input)

주어진 문자열을 패턴에 맞게 분할하여 문자열 배열로 반환합니다.

예제 - 핸드폰 번호 유효성 검사

다음은 핸드폰 번호의 유효성을 검사하는 예제입니다.

import java.util.regex.*;

public class PhoneValidationExample {
    public static void main(String[] args) {
        String phoneNumber1 = "010-1234-5678";
        String phoneNumber2 = "02-987-6543";
        String phoneNumber3 = "010-abc-defg";

        Pattern pattern = Pattern.compile("^01(?:0|1|[6-9])-(?:\\d{3}|\\d{4})-\\d{4}$");

        System.out.println(pattern.matcher(phoneNumber1).matches()); // true
        System.out.println(pattern.matcher(phoneNumber2).matches()); // false
        System.out.println(pattern.matcher(phoneNumber3).matches()); // false
    }
}

パターン은 "^01(?:0|1|[6-9])-(?:\d{3}|\d{4})-\d{4}$"로 설정되어 있습니다. 이 표현식은 010으로 시작하며 뒤에 -로 구분된 숫자 3자리 또는 4자리, 그리고 뒤에 -로 구분된 4자리 숫자로 이루어진 핸드폰 번호를 검사합니다. phoneNumber1은 유효한 핸드폰 번호이므로 matches() 메소드는 true를 반환합니다. 하지만 phoneNumber2와 phoneNumber3는 유효한 패턴에 맞지 않으므로 false를 반환합니다.

Matcher 클래스

Matcher 클래스는 패턴에 맞는 문자열을 검색하고 추출하는데 사용됩니다. Matcher 객체는 패턴을 가지고 있는 Pattern 객체의 matcher() 메소드로 생성할 수 있습니다. 아래는 Matcher 클래스의 주요한 메소드들입니다.

find()

public boolean find()

다음 매칭되는 부분 문자열을 검색합니다. 일치하는 경우 true를 반환하고, 그렇지 않은 경우 false를 반환합니다.

group()

public String group()

마지막으로 매칭된 부분 문자열을 반환합니다.

예제 - 이메일 주소 추출

다음은 문자열에서 이메일 주소를 추출하는 예제입니다.

import java.util.regex.*;

public class EmailExtractionExample {
    public static void main(String[] args) {
        String text = "이메일 주소는 example123@gmail.com과 contact@domain.com입니다.";

        Pattern pattern = Pattern.compile("\\b[\\w.-]+@[\\w.-]+\\.\\w+\\b");
        Matcher matcher = pattern.matcher(text);

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

패턴은 "\b[\w.-]+@[\w.-]+\.\w+\b"로 설정되어 있습니다. 이 표현식은 문자열 내에서 이메일 주소를 추출합니다. find() 메소드로 매칭되는 모든 부분 문자열을 검색하고, group() 메소드로 해당 부분 문자열을 반환하여 출력합니다.

마무리

이 포스팅에서는 자바에서 정규 표현식을 처리하는 Pattern과 Matcher 클래스의 사용법과 예제를 소개하였습니다. Pattern 클래스를 사용하여 패턴을 정의하고, Matcher 클래스를 사용하여 문자열에 대한 매칭 작업을 수행할 수 있습니다. 정규 표현식은 강력한 문자열 처리 도구이므로 다양한 상황에서 유용하게 사용될 수 있습니다.

댓글