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 문자만 허용)을 따르는지 검증할 때 유용하게 활용됩니다.