정규식에서 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()메서드로 문자열 내 매칭 여부를 확인할 수 있습니다.