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

Java 정규식 문자 클래스 \p{javaMirrored} 완벽 가이드

Java 정규식에서 \p{javaMirrored} 문자 클래스는 미러링(mirrored) 문자를 매칭합니다. 미러링 문자란 오른쪽에서 왼쪽으로 쓰이는 텍스트(RTL) 환경에서 좌우가 뒤집혀 표시되는 문자로, 소괄호·중괄호·대괄호 같은 기호들이 대표적인 예입니다.

좀 더 구체적으로 설명하면, 이 클래스는 특정 문자를 java.lang.Character 클래스의 isMirrored() 메서드에 인자로 전달했을 때 true를 반환하는 문자들과 일치합니다. 예를 들어 (, ), {, }, [, ], <, > 등이 여기에 해당합니다.

예제 1: 문자열에서 미러링 문자 개수 세기

다음 예제는 사용자로부터 문자열을 입력받아, 그 안에 포함된 미러링 문자의 개수를 세는 프로그램입니다.

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

public class RegexExample {
   public static void main(String args[]) {
      // 사용자로부터 문자열 입력받기
      System.out.println("문자열을 입력하세요");
      Scanner sc = new Scanner(System.in);
      String input = sc.nextLine();

      // 정규식 정의
      String regex = "[\\p{javaMirrored}]";

      // 정규식 컴파일
      Pattern pattern = Pattern.compile(regex);

      // Matcher 객체 생성
      Matcher matcher = pattern.matcher(input);

      int count = 0;
      while(matcher.find()) {
         count++;
      }
      System.out.println("미러링 문자 개수: " + count);
   }
}

실행 결과

문자열을 입력하세요
<hello< (how are you) {welcome}
미러링 문자 개수: 6

입력된 문자열에는 <가 2개, (, ), {, }가 각각 1개씩 있어 총 6개의 미러링 문자가 카운트됩니다.

예제 2: 미러링 문자로만 구성된 문자열 찾기

다음 예제는 5개의 문자열을 입력받아, 오직 미러링 문자로만 이루어진 문자열을 골라내는 프로그램입니다.

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

public class Example {
   public static void main(String args[]) {
      // 미러링 문자만 매칭하는 정규식
      String regex = "^\\p{javaMirrored}+$";

      // 입력 데이터 받기
      Scanner sc = new Scanner(System.in);
      System.out.println("5개의 문자열을 입력하세요: ");
      String input[] = new String[5];
      for (int i=0; i<5; i++) {
         input[i] = sc.nextLine();
      }

      // Pattern 객체 생성
      Pattern p = Pattern.compile(regex);

      System.out.println("미러링 문자로 구성된 문자열: ");
      for(int i=0; i<5;i++) {
         // Matcher 객체 생성
         Matcher m = p.matcher(input[i]);
         if(m.matches()) {
            System.out.println(m.group());
         }
      }
   }
}

실행 결과

5개의 문자열을 입력하세요:
{Raju}
<RAMU>
rahman
radha
{}<>()[]
미러링 문자로 구성된 문자열:
{}<>()[]

정규식 ^\p{javaMirrored}+$에서 ^$는 각각 문자열의 시작과 끝을 의미하고, +는 '하나 이상의 반복'을 나타냅니다. 따라서 이 패턴은 처음부터 끝까지 모든 문자가 미러링 문자일 때만 일치합니다. 위 실행 결과에서 알파벳이 섞여 있는 "{Raju}", "<RAMU>", "rahman", "radha"는 제외되고, 순수하게 기호로만 구성된 "{}<>()[]"만 출력된 것을 확인할 수 있습니다.

핵심 정리

  • \p{javaMirrored}는 Java 정규식에서 지원하는 전용 문자 클래스입니다.
  • Character.isMirrored()true를 반환하는 문자와 일치합니다.
  • 괄호류 기호(() [] {} <> 등)가 대표적인 미러링 문자입니다.
  • 반대로 미러링 문자가 아닌 것을 찾으려면 \P{javaMirrored}(대문자 P)를 사용하면 됩니다.