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