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

Java 정규식 \A 메타문자 – 전체 문자열의 시작 위치 매칭하기

Java 정규식에서 하위 표현식이자 메타문자인 \A전체 문자열(입력)의 시작 부분과 일치합니다. 일반적인 패턴 검색과 달리, \A를 사용하면 해당 패턴이 반드시 입력 문자열의 맨 앞에 있어야만 매칭됩니다.

\A와 ^의 차이점

\A는 캐럿(^)과 비슷한 역할을 하지만 미묘한 차이가 있습니다. MULTILINE 모드에서 ^는 각 줄의 시작과도 일치할 수 있지만, \A는 어떤 플래그가 설정되어 있더라도 항상 전체 입력 문자열의 시작만을 나타냅니다.

예제 1

다음 예제는 \A를 사용하여 "Hi"라는 단어가 문자열의 시작 부분에 있는지 확인합니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
    public static void main( String args[] ) {
        String regex = "\\AHi";
        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

입력 문자열이 "Hi"로 시작하기 때문에 매칭 횟수는 1입니다. 만약 "Hi"가 문자열 중간에만 있다면 결과는 0이 됩니다.

예제 2

다음 Java 프로그램은 사용자로부터 문자열을 입력받아 해당 문자열에 ASCII가 아닌(non-ASCII) 문자가 포함되어 있는지 검증합니다. 여기서는 \A로 문자열의 시작을, \z로 문자열의 끝을 지정하여 전체 범위를 검사합니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StartingOfInput {
    public static void main( String args[] ) {
        String regex = "\\A\\p{ASCII}*\\z";
        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("입력값은 ASCII 문자만 포함하고 있습니다.");
        } else {
            System.out.println("입력값에 ASCII가 아닌 문자가 포함되어 있습니다.");
        }
    }
}

실행 결과 1

입력 문자열을 입력하세요:
What is your name
입력값은 ASCII 문자만 포함하고 있습니다.

실행 결과 2

입력 문자열을 입력하세요:
whÿ do we fall
입력값에 ASCII가 아닌 문자가 포함되어 있습니다.

정리

\A는 전체 입력 문자열의 시작 지점에 고정(anchor)하는 메타문자입니다. 특히 여러 줄로 된 입력을 다룰 때 ^보다 엄격한 시작 위치 검사가 필요하거나, \z와 함께 사용해 입력값 전체가 특정 패턴(예: ASCII 문자만 허용)을 따르는지 검증할 때 유용하게 활용됩니다.