Java 정규 표현식에서 메타 문자 "."(마침표)는 알파벳, 숫자, 특수 문자 등 임의의 한 글자와 일치하는 역할을 합니다. 이번 글에서는 이 메타 문자를 활용해 문자열을 매칭하는 방법을 예제와 함께 살펴보겠습니다.
예제 1: 임의의 문자 개수 세기
다음 프로그램은 사용자로부터 문자열을 입력받아, 정규 표현식 "."으로 각 문자를 하나씩 매칭한 뒤 전체 문자 개수를 출력합니다.
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 = ".";
// 정규 표현식 컴파일
Pattern pattern = Pattern.compile(regex);
// Matcher 객체 생성
Matcher matcher = pattern.matcher(input);
int count = 0;
while(matcher.find()) {
count ++;
}
System.out.println("입력한 문자열은 " + count + "개의 문자를 포함합니다.");
}
}실행 결과
문자열을 입력하세요 hello how are you welcome to tutorialspoint 입력한 문자열은 42개의 문자를 포함합니다.
응용: 특정 위치의 문자 매칭
메타 문자 "."을 조합하면 더 유연한 패턴을 만들 수 있습니다. 예를 들어 다음 정규 표현식은 a로 시작하고 b로 끝나며, 그 사이에 정확히 3개의 임의 문자가 있는 문자열과 일치합니다.
a...b
또한 ".*"처럼 작성하면 0개 이상의 임의의 문자, 즉 n개의 문자와도 일치시킬 수 있습니다.
예제 2: 조건에 맞는 문자열 필터링
다음 Java 프로그램은 사용자에게 5개의 문자열을 입력받고, b로 시작해서 a로 끝나며 그 사이에 몇 개의 문자든 존재할 수 있는 문자열만 통과시킵니다.
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 = "^b.*a$";
Scanner sc = new Scanner(System.in);
System.out.println("5개의 문자열을 입력하세요:");
String input[] = new String[5];
for (int i=0; i<5; i++) {
input[i] = sc.nextLine();
}
// Pattern 객체 생성
Pattern p = Pattern.compile(regex);
for(int i=0; i<5;i++) {
// Matcher 객체 생성
Matcher m = p.matcher(input[i]);
if(m.find()) {
System.out.println(input[i]+": 허용됨");
} else {
System.out.println(input[i]+": 허용되지 않음");
}
}
}
}실행 결과
5개의 문자열을 입력하세요: barbara boolean baroda ram raju barbara: 허용됨 boolean: 허용되지 않음 baroda: 허용됨 ram: 허용되지 않음 raju: 허용되지 않음
정리
- . : 줄 바꿈을 제외한 임의의 한 문자와 일치
- .* : 임의의 문자가 0개 이상 반복되는 패턴과 일치
- ^ 와 $ 를 함께 사용하면 문자열의 시작과 끝 조건을 지정할 수 있음
이처럼 메타 문자 "."을 활용하면 복잡한 문자열 검증 로직도 간결한 정규 표현식 하나로 처리할 수 있습니다.