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

Java 정규 표현식(RegEx)으로 임의의 문자 매칭하기

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개 이상 반복되는 패턴과 일치
  • ^$ 를 함께 사용하면 문자열의 시작과 끝 조건을 지정할 수 있음

이처럼 메타 문자 "."을 활용하면 복잡한 문자열 검증 로직도 간결한 정규 표현식 하나로 처리할 수 있습니다.