정규식의 하위 표현식이자 메타문자인 \w는 단어 문자(word character)를 매칭합니다. 여기서 단어 문자란 알파벳 소문자(a~z), 대문자(A~Z), 그리고 숫자(0~9)를 의미합니다. 즉, 영문자와 숫자로 구성된 모든 문자를 하나의 패턴으로 간편하게 찾아낼 수 있는 유용한 메타문자입니다.
참고로 \w는 [a-zA-Z_0-9]와 동일한 의미를 가지며, 밑줄(_) 문자도 포함됩니다.
예제 1: 패턴 매칭 횟수 세기
다음 예제는 입력 문자열에서 "\w to" 패턴과 일치하는 부분이 몇 번 나타나는지 세어 출력합니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main( String args[] ) {
String regex = "\\w to";
String input = "Hello how are you welcome to Tutorialspoint";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
int count = 0;
while(m.find()) {
count++;
}
System.out.println("Number of matches: "+count);
}
}출력 결과
Number of matches: 1
입력 문자열에서 "come to" 부분이 패턴 "\w to"와 일치하므로 매칭 횟수는 1이 됩니다.
예제 2: 단어 문자를 포함한 문자열 걸러내기
다음 예제는 사용자로부터 5개의 문자열을 입력받은 후, 그중 단어 문자(영문자 또는 숫자)를 포함하고 있는 문자열만 골라서 출력합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchWordCharacters {
public static void main( String args[] ) {
String regex = "\\w.*$";
Scanner sc = new Scanner(System.in);
System.out.println("Enter 5 input strings: ");
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("Strings that contain word characters: ");
for(int i=0; i<5;i++) {
//Matcher 객체 생성
Matcher m = p.matcher(input[i]);
if(m.matches()) {
System.out.println(m.group());
}
}
}
}출력 결과
Enter 5 input strings: sample test test23 hello## #$%&& Strings that contain word characters: sample test test23 hello##
실행 결과를 보면 "sample", "test", "test23", "hello##"는 단어 문자를 포함하고 있어 출력되었지만, "#$%&&"처럼 특수문자만으로 구성된 문자열은 매칭되지 않아 제외된 것을 확인할 수 있습니다.
정리
\w 메타문자는 Java 정규식에서 영숫자 문자를 손쉽게 매칭할 때 활용됩니다. 반대로 단어 문자가 아닌 문자를 찾고 싶다면 대문자 형태인 \W를 사용하면 됩니다. 이러한 메타문자를 잘 활용하면 입력값 검증, 데이터 추출, 문자열 필터링 등 다양한 작업을 간결한 코드로 처리할 수 있습니다.