Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java 정규식 re{n, m} 메타문자 완벽 이해하기

정규식에서 re{n, m} 메타문자(하위 표현식)는 바로 앞에 위치한 표현식이 최소 n번, 최대 m번 반복될 때 일치(match)하도록 지정하는 수량자입니다. 즉, 반복 횟수의 범위를 직접 제어할 수 있어 입력값 검증이나 패턴 매칭에 매우 유용하게 활용됩니다.

예제 1: 반복 범위 매칭 확인하기

아래 예제는 xyy{2,4} 패턴을 사용하여 'x' 뒤에 'y'가 3~5번 연속으로 나오는 문자열을 찾습니다. 여기서 {2,4}는 앞의 'y'가 최소 2번, 최대 4번 반복되어야 함을 의미합니다.

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

public class RegexExample {
    public static void main(String args[]) {
        String regex = "xyy{2,4}";
        String input = "xxyyzxxyyyyxyyzxxyyzz";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        int count = 0;
        while(m.find()) {
            count++;
        }
        System.out.println("일치 횟수: " + count);
    }
}

실행 결과

일치 횟수: 1

입력 문자열에서 조건을 만족하는 패턴은 단 하나뿐이므로 일치 횟수가 1로 출력됩니다.

예제 2: 이름 입력값 유효성 검사

다음 Java 프로그램은 사용자로부터 학생 이름을 입력받고, 정규식 [a-zA-Z]{1,20}을 통해 알파벳으로만 구성된 1자 이상 20자 이하의 이름인지 검증합니다.

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

public class RegexExample {
    public static void main(String args[]) {
        // 최소 1자, 최대 20자의 영문자를 매칭하는 정규식
        String regex = "[a-zA-Z]{1,20}";
        Scanner sc = new Scanner(System.in);
        System.out.println("학생 이름을 입력하세요:");
        String name = sc.nextLine();
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(name);
        if(m.matches()) {
            System.out.println("이름이 적절합니다.");
        } else {
            System.out.println("이름이 적절하지 않습니다.");
        }
    }
}

실행 결과 1: 유효한 이름

학생 이름을 입력하세요:
Mouktika
이름이 적절합니다.

'Mouktika'는 8글자의 영문자로만 구성되어 있으므로 검증을 통과합니다.

실행 결과 2: 숫자가 포함된 경우

학생 이름을 입력하세요:
ka 34
이름이 적절하지 않습니다.

공백과 숫자가 포함되어 있어 영문자만 허용하는 정규식 조건에 맞지 않습니다.

실행 결과 3: 길이 초과된 경우

학생 이름을 입력하세요:
Sri Veera Venkata Satya Sai Suresh Santosh Samrat
이름이 적절하지 않습니다.

공백을 포함한 전체 길이가 20자를 초과하므로 {1,20} 범위 조건을 만족하지 못해 거부됩니다.

정리

{n, m} 수량자는 반복 횟수의 상한과 하한을 동시에 지정할 수 있어, 비밀번호 길이 검사, 아이디 형식 확인, 이름 길이 제한 등 실무에서 폭넓게 활용됩니다. 특히 사용자 입력값 검증 단계에서 잘못된 데이터를 사전에 걸러내는 데 효과적인 도구입니다.