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

Java 정규식 re+ 메타문자, 한 번 이상 반복 매칭 완벽 가이드

정규식에서 re+는 수량자(quantifier) 메타문자 중 하나로, 바로 앞에 위치한 표현식이 한 번 이상 반복되는 패턴과 일치시키는 역할을 합니다. 즉, 앞선 요소가 최소 1회는 반드시 나타나야 하며, 그 이상 몇 번이든 연속으로 등장해도 매칭됩니다.

예를 들어 a+는 "a", "aa", "aaa"처럼 문자 a가 하나 이상 연속된 모든 문자열과 일치하지만, 빈 문자열과는 일치하지 않습니다. 이 점이 0번 이상을 의미하는 별표(*) 메타문자와의 핵심적인 차이입니다.

예제 1: re+로 패턴 반복 횟수 세기

다음 예제는 입력 문자열에서 aabc+ 패턴(뒤의 c가 한 번 이상 반복)과 일치하는 부분이 몇 개 있는지 확인합니다.

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

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

실행 결과

일치 횟수: 4

예제 2: 입력값에 숫자가 포함되어 있는지 검사하기

실무에서 자주 사용되는 형태로, [0-9]+ 패턴을 활용하면 사용자가 입력한 문자열 안에 숫자가 하나라도 포함되어 있는지 손쉽게 검사할 수 있습니다.

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

public class Test {
    public static void main(String args[]) {
        String regex = "[0-9]+";
        Scanner sc = new Scanner(System.in);
        
        System.out.println("입력 문자열을 입력하세요: ");
        String input = sc.nextLine();
        
        // Pattern 객체 생성
        Pattern p = Pattern.compile(regex);
        // Matcher 객체 생성
        Matcher m = p.matcher(input);
        
        if (m.find()) {
            System.out.println("입력한 내용에 숫자가 포함되어 있습니다.");
        } else {
            System.out.println("입력한 내용에 숫자가 포함되어 있지 않습니다.");
        }
    }
}

실행 결과 1 — 숫자가 없는 경우

입력 문자열을 입력하세요:
sample text
입력한 내용에 숫자가 포함되어 있지 않습니다.

실행 결과 2 — 숫자가 있는 경우

입력 문자열을 입력하세요:
sample data 464
입력한 내용에 숫자가 포함되어 있습니다.

정리

  • re+: 앞의 표현식이 1회 이상 반복될 때 매칭됩니다.
  • re*: 앞의 표현식이 0회 이상 반복될 때 매칭됩니다.
  • [0-9]+처럼 문자 클래스와 함께 사용하면 연속된 숫자 추출·검증에 유용합니다.
  • Java에서는 Pattern.compile()로 정규식을 컴파일하고, Matcher 객체의 find() 메서드로 문자열 내 매칭 여부를 확인할 수 있습니다.