정규 표현식에서 단어 문자(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패턴이 널리 활용됩니다.