Java 정규식에서 \s 메타문자란?
Java 정규식(Regular Expression)에서 \s 메타문자는 공백 문자(white space)와 일치하는 하위 표현식입니다. 여기서 공백 문자에는 스페이스바, 탭(\t), 줄바꿈(\n), 캐리지 리턴(\r), 폼 피드(\f) 등이 모두 포함됩니다.
Java 코드에서는 문자열 내에서 백슬래시가 이스케이프 문자로 해석되기 때문에, 정규식 패턴을 작성할 때 "\\s"처럼 백슬래시를 두 번 사용해야 합니다.
예제 1: 공백 문자 개수 세기
다음 예제는 입력 문자열에서 공백 문자가 몇 번 나타나는지 세어 출력합니다.
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexExample {
public static void main(String args[]) {
String regex = "\\s";
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("매칭된 개수: " + count);
}
}실행 결과
매칭된 개수: 7
입력 문자열에 단어 사이의 공백이 총 7개 있으므로, \s 메타문자는 각 공백을 하나씩 찾아내 7을 출력합니다.
예제 2: 불필요한 연속 공백 제거하기
다음 예제는 사용자로부터 문자열을 입력받은 후, 단어 사이에 있는 불필요한 연속 공백들을 하나의 공백으로 정리합니다. 이때 정규식 \s+를 사용하는데, 덧셈 기호(+)는 '하나 이상의 연속된 공백'을 의미합니다.
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("문자열을 입력하세요");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 하나 이상의 연속된 공백을 매칭하는 정규식
String regex = "\\s+";
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
// 모든 공백 문자를 단일 공백으로 대체
String result = matcher.replaceAll(" ");
System.out.print("공백 정리 후 텍스트: \n" + result);
}
}실행 결과
문자열을 입력하세요 hello this is a sample text with irregular spaces 공백 정리 후 텍스트: hello this is a sample text with irregular spaces
정리
- \s: 공백 문자 하나(스페이스, 탭, 줄바꿈 등)와 일치합니다.
- \s+: 하나 이상의 연속된 공백 문자와 일치하며, 여러 개의 공백을 한 번에 처리할 때 유용합니다.
- Java에서 정규식을 작성할 때는 백슬래시를 두 번(
\\s) 입력해야 합니다. Matcher클래스의replaceAll()메서드를 활용하면 매칭된 부분을 손쉽게 다른 문자열로 대체할 수 있습니다.