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

Java 정규식 \W 메타문자 완벽 이해하기: 비단어 문자 매칭 방법

정규식에서 서브 표현식이자 메타문자인 \W비단어 문자(non-word character), 즉 영문자·숫자·밑줄(_)을 제외한 모든 문자와 일치합니다. 공백, 특수 기호, 문장부호 등이 여기에 해당하며, \w(단어 문자)의 반대 개념입니다.

예제 1: 비단어 문자 개수 세기

다음 예제는 입력 문자열에서 \W 패턴과 일치하는 문자가 몇 개 있는지 확인합니다. 정규식을 \\W!로 작성하여 느낌표(!) 앞에 위치한 비단어 문자를 찾습니다.

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
    public static void main(String args[]) {
        String regex = "\\W!";
        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

입력 문자열에서 느낌표 바로 앞의 공백 문자가 비단어 문자에 해당하므로, 일치 횟수는 1회입니다.

예제 2: 비단어 문자를 포함한 문자열 필터링

다음 예제는 사용자로부터 5개의 문자열을 입력받은 뒤, 그중 비단어 문자를 포함하고 있는 문자열만 골라 출력합니다. 정규식 \\W.*$는 비단어 문자로 시작하여 그 뒤의 모든 문자까지를 의미합니다.

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 = "\\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 non-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:
$hello
sample
test1
test2
#$&*
Strings that contain non-word characters:
$hello
#$&*

핵심 정리

  • \W: 단어 문자(영문자, 숫자, 밑줄)가 아닌 모든 문자와 일치하며, [^a-zA-Z0-9_]와 동일한 의미입니다.
  • \w: 단어 문자 자체와 일치하며, \W의 정반대 역할을 합니다.
  • Java 코드에서 정규식을 문자열로 작성할 때는 백슬래시를 이스케이프해야 하므로 "\\W"처럼 두 번 작성해야 합니다.

이처럼 \W 메타문자를 활용하면 특수문자 검증, 입력값 유효성 검사, 불필요한 기호 제거 등 다양한 문자열 처리 작업을 간결하게 구현할 수 있습니다.