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

Java 정규 표현식 \b 메타 문자 완벽 이해하기

\b 메타 문자란?

정규 표현식에서 서브 표현식(메타 문자)인 \b는 사용되는 위치에 따라 서로 다른 의미를 가집니다.

  • 대괄호([]) 밖에서 사용할 경우: 단어 경계(word boundary)를 의미합니다. 즉, 단어의 시작 또는 끝나는 위치와 일치합니다.
  • 대괄호([]) 안에서 사용할 경우: 백스페이스 문자(0x08)와 일치합니다.

예제 1: 단어 경계를 이용해 특정 단어 찾기

다음 예제는 사용자로부터 문자열을 입력받은 뒤, 단어 경계로 감싸진 "because"라는 단어가 몇 번 등장하는지 세는 Java 프로그램입니다. 정규 표현식 \bbecause\b를 사용하면 "because"가 다른 단어의 일부가 아닌 독립된 단어로 존재할 때만 매칭됩니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexExample {
public static void main(String args[]) {
String regex = "\\bbecause\\b";
Scanner sc = new Scanner(System.in);
System.out.println("Enter a string: ");
String input = sc.nextLine();
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
int count = 0;
while(m.find()) {
count++;
}
System.out.println("Number of matches: " + count);
}
}

실행 결과

Enter a string:
A sentence doesn't end with because because, because is a conjunction
Number of matches: 3

입력된 문장에서 "because"가 독립된 단어로 3번 등장했기 때문에 매칭 횟수는 3이 출력됩니다. 만약 단어 경계 없이 단순히 "because"만 검색했다면, 다른 단어에 포함된 경우에도 매칭되어 결과가 달라질 수 있습니다.

예제 2: 단어 경계의 개수 세기

다음 Java 예제는 사용자로부터 문자열을 입력받아 해당 문자열 안에 존재하는 단어 경계의 개수를 출력합니다. 일반적으로 단어 경계의 개수는 (단어 개수 × 2)와 같습니다.

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 input string: ");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
String regex = "\\b";
// 정규 표현식 컴파일
Pattern pattern = Pattern.compile(regex);
// 매처(Matcher) 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count++;
}
System.out.println(count);
}
}

실행 결과

Enter input string:
Hello how are you welcome to Tutorialspoint
14

입력 문자열에는 7개의 단어가 있으며, 각 단어의 시작과 끝에 경계가 하나씩 존재하므로 총 14개의 단어 경계가 출력됩니다. 이처럼 \b 메타 문자를 활용하면 단어 단위의 정확한 검색과 텍스트 분석이 가능합니다.