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

Java 정규식(RegEx)으로 단어 문자를 매칭하는 방법 – \w 메타 문자 완벽 가이드

정규 표현식에서 단어 문자(word character)란 영어 알파벳 대소문자(A~Z, a~z)와 숫자(0~9), 그리고 밑줄(_)을 의미합니다. Java에서는 메타 문자 \w를 사용해 이러한 단어 문자들을 손쉽게 매칭할 수 있습니다.

참고로 \w[a-zA-Z0-9_]와 동일한 의미를 가지며, 반대로 단어 문자가 아닌 문자를 찾으려면 \W(대문자)를 사용하면 됩니다.

예제 1: 문자열 시작 부분의 단어 문자 5개 매칭하기

아래 예제는 사용자로부터 입력받은 문자열이 단어 문자 5개로 시작하는지 확인하는 코드입니다. 정규식 ^\w{5}에서 ^는 문자열의 시작을, {5}는 정확히 5개의 단어 문자를 의미합니다.

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 a String");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        String regex = "^\\w{5}";

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

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

        if(matcher.find()) {
            System.out.println("Match occurred");
        } else {
            System.out.println("Match not occurred");
        }
    }
}

실행 결과 1 – 단어 문자로 시작하는 경우

Enter a String
hello
Match occurred

입력값 "hello"는 모두 알파벳 소문자로 이루어진 5글자이므로 정규식과 일치하여 매칭에 성공합니다.

실행 결과 2 – 특수 문자가 포함된 경우

Enter a String
#how
Match not occurred

입력값 "#how"는 첫 번째 문자가 특수 문자 '#'이므로 단어 문자 조건을 만족하지 못해 매칭에 실패합니다.

예제 2: matches() 메서드로 전체 문자열 검증하기

두 번째 예제는 String 클래스의 matches() 메서드를 활용하여 입력값 전체가 단어 문자로만 구성되어 있는지 확인합니다. 정규식 \w*에서 *는 '0개 이상의 반복'을 의미합니다.

import java.util.Scanner;

public class RegexExample {
    public static void main(String args[]) {
        // 단어 문자만 허용하는 정규 표현식
        String regex = "\\w*";

        System.out.println("Enter input value: ");
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();

        boolean bool = input.matches(regex);

        if(bool) {
            System.out.println("match occurred");
        } else {
            System.out.println("match not occurred");
        }
    }
}

실행 결과

Enter input value:
*##&
match not occurred

입력값 "*##&"는 특수 문자만 포함하고 있어 단어 문자 패턴과 일치하지 않으므로 매칭에 실패합니다.

핵심 정리

  • \w: 영문 대소문자, 숫자, 밑줄(_)에 해당하는 단어 문자 하나와 매칭됩니다.
  • \W: 단어 문자가 아닌 문자와 매칭됩니다.
  • Pattern.compile() + Matcher 조합 또는 간편하게 String.matches() 메서드를 사용할 수 있습니다.
  • 사용자 입력 검증(아이디, 비밀번호 형식 확인 등)에 \w 패턴이 널리 활용됩니다.