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

Java 정규식 메타 문자를 리터럴 문자로 일치시키는 방법

Java에서 정규식 메타 문자(^, $, [] 등)를 특별한 의미 없이 일반 문자 그대로 매칭해야 할 때가 있습니다. 이럴 때 Pattern 클래스의 LITERAL 필드를 활용하면 간단하게 해결할 수 있습니다.

compile() 메서드의 매개변수

Pattern 클래스의 compile() 메서드는 다음 두 가지 매개변수를 받습니다.

  • 정규식을 나타내는 문자열(String)
  • Pattern 클래스에 정의된 필드 중 하나인 정수(int) 형태의 플래그 값

Pattern.LITERAL 플래그란?

LITERAL 필드를 사용하면 패턴이 리터럴(literal) 방식으로 해석됩니다. 즉, 정규식의 모든 메타 문자와 이스케이프 시퀀스가 더 이상 특별한 의미를 갖지 않고, 단순한 일반 문자로 취급됩니다.

따라서 정규식 메타 문자를 일반 문자처럼 매칭하고 싶다면, compile() 메서드 호출 시 정규식과 함께 Pattern.LITERAL을 플래그 값으로 전달하면 됩니다.

예제 코드

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Example {
    public static void main(String[] args) {
        System.out.println("Enter input data: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String regex = "^[0-9]";
        // Pattern 객체 생성
        Pattern pattern = Pattern.compile(regex, Pattern.LITERAL);
        // Matcher 객체 생성
        Matcher matcher = pattern.matcher(input);
        int count = 0;
        while(matcher.find()) {
            count++;
            System.out.println(matcher.group());
        }
        System.out.println("Number of matches: "+count);
    }
}

실행 결과 1

일반적인 숫자 입력의 경우, ^[0-9]는 리터럴 문자열로 해석되므로 일치하는 부분이 없습니다.

Enter input data:
9848022338
Number of matches: 0

실행 결과 2

입력값이 정확히 ^[0-9]라면, 메타 문자가 아닌 일반 문자열로 매칭되어 1건의 일치 결과를 얻습니다.

Enter input data:
^[0-9]
^[0-9]
Number of matches: 1

정리

Pattern.LITERAL 플래그를 사용하면 정규식 문법을 무시하고 패턴 전체를 순수한 문자열로 취급합니다. 사용자 입력에 포함된 특수 문자를 안전하게 검색해야 하거나, 정규식 기능 없이 단순 문자열 매칭이 필요한 경우에 유용하게 활용할 수 있습니다.