Java 정규식에서 특정 단어를 전체 단어 기준으로 정확하게 찾고 싶다면, 메타 문자 \b(word boundary, 단어 경계)를 활용해야 합니다.
\b 메타 문자란?
메타 문자 \b는 단어 경계를 의미하며, 다음 위치에서 일치(match)합니다.
- 첫 번째 단어 문자 앞
- 마지막 단어 문자 뒤
- 단어 문자와 비단어 문자 사이
여기서 단어 문자(word character)는 영문자, 숫자, 밑줄(_)을 말하며, 그 외의 공백이나 특수문자 등은 비단어 문자로 취급됩니다.
전체 단어 매칭 방법
따라서 어떤 단어를 통째로 일치시키고 싶다면, 해당 단어의 앞뒤를 단어 경계 메타 문자로 감싸주면 됩니다.
\btest\b
이 패턴은 testing, contest처럼 "test"가 포함된 더 긴 단어와는 일치하지 않고, 오직 독립된 단어 "test"만 정확히 찾아냅니다.
예제 코드
다음 Java 예제는 사용자로부터 입력받은 문자열에서 "test"라는 단어가 몇 번 등장하는지 세어 출력합니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("입력 텍스트를 입력하세요: ");
String input = sc.nextLine();
String regex = "\\btest\\b";
// 패턴 객체 생성
Pattern pattern = Pattern.compile(regex);
// 컴파일된 패턴을 입력 문자열에 적용
Matcher matcher = pattern.matcher(input);
int count = 0;
while (matcher.find()) {
count++;
}
System.out.println("'test' 단어의 등장 횟수 : " + count);
}
}실행 결과
입력 텍스트를 입력하세요: sample data: test test test 'test' 단어의 등장 횟수 : 3
핵심 정리
\b는 실제 문자를 소비하지 않는 제로 폭(zero-width) 어설션입니다.- Java 문자열에서 역슬래시(
\)는 이스케이프 처리가 필요하므로, 정규식 작성 시"\\btest\\b"처럼 이중 역슬래시를 사용해야 합니다. - 단순히
test라고만 검색하면 부분 문자열까지 모두 매칭되므로, 정확한 단어 검색에는 반드시\b로 감싸는 것이 좋습니다.