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)를 사용하면 됩니다.