re* 메타 문자란?
정규 표현식에서 하위 표현식이자 메타 문자인 re*는 바로 앞에 위치한 표현식(문자)이 0번 이상 반복되는 경우와 일치(match)합니다. 즉, 해당 문자가 아예 나타나지 않는 경우부터 여러 번 연속으로 나타나는 경우까지 모두 매칭할 수 있습니다.
예를 들어 aabc*라는 정규 표현식은 "aab" 뒤에 문자 'c'가 0회 이상 이어지는 모든 문자열과 일치합니다. 따라서 "aab", "aabc", "aabcc", "aabccc" 같은 패턴이 모두 매칭 대상이 됩니다.
예제 1: re*로 패턴 매칭 횟수 세기
다음 예제는 입력 문자열에서 aabc* 패턴과 일치하는 부분이 몇 번 나타나는지 계산하여 출력합니다.
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: 숫자를 포함한 문자열 걸러내기
(.*)?(\d+) 패턴은 임의의 문자(.)가 0회 이상 반복된 후(*), 하나 이상의 숫자(\d+)로 끝나는 문자열을 의미합니다. 다음 예제는 사용자로부터 5개의 문자열을 입력받아, 그중 숫자를 포함하는 문자열만 골라 출력합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchAllCharacters {
public static void main(String args[]) {
String regex = "(.*)?(\\d+)";
Scanner sc = new Scanner(System.in);
System.out.println("문자열 5개를 입력하세요: ");
String input[] = new String[5];
for (int i = 0; i < 5; i++) {
input[i] = sc.nextLine();
}
// Pattern 객체 생성
Pattern p = Pattern.compile(regex);
System.out.println("숫자를 포함하는 문자열: ");
for (int i = 0; i < 5; i++) {
// Matcher 객체 생성
Matcher m = p.matcher(input[i]);
if (m.matches()) {
System.out.println(m.group());
}
}
}
}실행 결과
문자열 5개를 입력하세요:
테스트 데이터
안녕하세요 반갑습니다 335
튜토리얼포인트에 오신 것을 환영합니다
샘플 텍스트 1
즐거운 하루 되세요
숫자를 포함하는 문자열:
안녕하세요 반갑습니다 335
샘플 텍스트 1정리
re* 메타 문자는 앞선 표현식의 0회 이상 반복을 의미하며, 패턴 탐색, 입력값 검증, 문자열 필터링 등 다양한 상황에서 유용하게 활용됩니다. 자바에서는 Pattern 클래스로 정규 표현식을 컴파일하고, Matcher 클래스로 실제 매칭을 수행하는 방식으로 손쉽게 정규 표현식 기반 문자열 처리를 구현할 수 있습니다.