Pattern.CASE_INSENSITIVE 필드란?
Java의 java.util.regex.Pattern 클래스가 제공하는 CASE_INSENSITIVE 필드는 정규 표현식 매칭 시 대소문자를 구분하지 않도록 설정하는 플래그입니다. 이 값을 compile() 메서드의 두 번째 인자로 전달하면, 이후 검색 과정에서 영문자의 대문자와 소문자가 모두 동일한 문자로 취급됩니다.
참고: 기본적으로 이 플래그는 ASCII 문자에만 적용됩니다. 그 외 유니코드 문자까지 대소문자 구분 없이 매칭하려면 UNICODE_CASE 플래그와 함께 사용해야 합니다.
또한 패턴 문자열 안에 인라인 플래그인 (?i)를 삽입하는 방법으로도 동일한 효과를 얻을 수 있습니다.
예제 1: 대소문자 구분 없이 특정 문자 개수 세기
다음 예제는 사용자로부터 문장과 찾고 싶은 문자 하나를 입력받아, 해당 문자가 문장 안에 몇 번 등장하는지 대소문자를 구분하지 않고 계산합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class CASE_INSENSITIVE_Example {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("입력 데이터를 입력하세요: ");
String input = sc.nextLine();
System.out.println("찾을 문자를 입력하세요: ");
char ch = sc.next().toCharArray()[0];
// 찾으려는 문자를 위한 정규 표현식
String regex = "[" + ch + "]";
// 정규 표현식 컴파일 (대소문자 구분 없음)
Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("문자 " + ch + "는(은) 주어진 텍스트에서 " + count + "번 나타났습니다 (대소문자 구분 없음)");
}
}
실행 결과
입력 데이터를 입력하세요: Tutorials Point originated from the idea that there exists a class of readers who respond better to online content and prefer to learn new skills at their own pace from the comforts of their drawing rooms. 찾을 문자를 입력하세요: T 문자 T는(은) 주어진 텍스트에서 20번 나타났습니다 (대소문자 구분 없음)
입력된 지문에는 대문자 'T'와 소문자 't'가 섞여 있지만, CASE_INSENSITIVE 플래그 덕분에 두 경우 모두 같은 문자로 간주되어 총 20회로 집계되었습니다. 만약 이 플래그를 사용하지 않았다면 대문자 'T'만 카운트되었을 것입니다.
예제 2: 입력값이 boolean인지 검사하기
다음 예제는 true|false 정규 표현식에 CASE_INSENSITIVE 플래그를 적용하여, 입력된 문자열이 boolean 형태인지 확인합니다. 이 방식을 사용하면 "TRUE", "False"처럼 대소문자가 뒤섞인 입력도 올바르게 처리할 수 있습니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class VerifyBoolean {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("문자열 값을 입력하세요: ");
String str = sc.next();
Pattern pattern = Pattern.compile("true|false", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(str);
if (matcher.matches()) {
System.out.println("주어진 문자열은 boolean 타입입니다");
} else {
System.out.println("주어진 문자열은 boolean 타입이 아닙니다");
}
}
}
실행 결과
문자열 값을 입력하세요: true 주어진 문자열은 boolean 타입입니다
문자열 값을 입력하세요: false 주어진 문자열은 boolean 타입입니다
문자열 값을 입력하세요: hello 주어진 문자열은 boolean 타입이 아닙니다
정리
Pattern.CASE_INSENSITIVE 플래그는 정규 표현식에서 대소문자 구분을 없애야 하는 상황에서 매우 유용합니다. 사용자 입력 검증, 키워드 검색, 로그 분석 등 대소문자가 일정하지 않은 데이터를 다룰 때 이 플래그를 활용하면 별도의 전처리 없이 깔끔하고 안정적인 매칭 로직을 작성할 수 있습니다.