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

Java 정규식 \z 메타문자 완벽 이해하기

Java 정규식 \z란 무엇인가?

Java 정규식에서 하위 표현식(메타문자)인 \z문자열의 끝을 나타냅니다. 즉, 패턴이 입력 문자열의 마지막 위치에 정확히 일치해야만 매칭이 성공합니다.

참고로 유사한 메타문자인 \Z도 존재하는데, \Z는 문자열 끝에 개행 문자가 있을 경우 그 앞에서도 일치를 허용하는 반면, \z는 오직 문자열의 절대적인 끝에서만 일치한다는 차이가 있습니다.

예제 1: 문자열 끝 패턴 매칭

다음 예제는 입력 문자열이 특정 단어로 끝나는지 확인하고, 매칭 횟수를 출력합니다.

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

public class RegexExample {
    public static void main(String args[]) {
        String regex = "Tutorialspoint\\z";
        String input = "Hi how are you welcome to Tutorialspoint";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        int count = 0;
        while(m.find()) {
            count++;
        }
        System.out.println("매칭 횟수: " + count);
    }
}

실행 결과

매칭 횟수: 1

입력 문자열이 "Tutorialspoint"로 끝나기 때문에 \z 조건을 만족하여 한 번 매칭되었습니다. 만약 문자열 중간에 동일한 단어가 있더라도, 끝에 위치하지 않으면 매칭되지 않습니다.

예제 2: 입력값이 숫자로 끝나는지 검증

다음 Java 프로그램은 주어진 입력 텍스트가 숫자로 끝나는지 여부를 검증합니다.

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

public class Data {
    public static void main(String args[]) {
        String regex = "[0-9]\\z";
        String input = "Hi how are you \n this is sample text \n this is third line 554";
        Pattern p = Pattern.compile(regex);
        Matcher m = p.matcher(input);
        if(m.find()) {
            System.out.println("입력값은 숫자로 끝납니다");
        } else {
            System.out.println("입력값은 숫자로 끝나지 않습니다");
        }
    }
}

실행 결과

입력값은 숫자로 끝납니다

입력 문자열의 마지막 줄이 숫자 "554"로 끝나므로, [0-9]\z 패턴이 성공적으로 일치했습니다.

\z 활용 시 주의사항

  • $와의 차이: 기본 모드에서 $는 문자열 끝 또는 마지막 개행 문자 앞에서 일치하지만, \z는 오직 문자열의 실제 끝에서만 일치합니다.
  • MULTILINE 플래그: $는 MULTILINE 모드에서 각 줄의 끝과 일치하지만, \z는 이 플래그의 영향을 받지 않고 항상 전체 문자열의 끝만을 가리킵니다.
  • 활용 사례: 파일 확장자 검증, 로그 형식 확인, 입력값 말미 유효성 검사 등 문자열 종료 조건을 엄격하게 확인해야 할 때 유용합니다.