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

Java 정규식으로 문자열에 괄호 ( 또는 )가 포함되었는지 확인하는 방법

괄호 ( 또는 ) 포함 여부를 확인하는 Java 정규식

정규 표현식(Regular Expression)을 사용하면 문자열에 특정 문자가 포함되어 있는지 손쉽게 검사할 수 있습니다. 다음 정규식은 괄호 ( 또는 )가 포함된 문자열을 허용합니다.

"^.*[\\(\\)].*$";
  • ^ : 문자열의 시작 위치를 나타냅니다.

  • .* : 0개 이상의 임의의 문자와 일치합니다.

  • [\\(\\)] : 괄호 ( 또는 )와 일치합니다. 괄호는 정규식에서 특별한 의미를 가지는 메타 문자이므로 역슬래시(\\)로 이스케이프해야 합니다.

  • $ : 문자열의 끝을 나타냅니다.

이 패턴은 "문자열의 시작 → 임의의 문자들 → 괄호 한 개 → 임의의 문자들 → 문자열의 끝" 순서로 검사하기 때문에, 괄호가 문자열 어디에 있더라도 하나만 존재하면 매칭에 성공합니다.

예제 1: Pattern 클래스와 Matcher 클래스 활용

java.util.regex 패키지의 Pattern 클래스로 정규식을 컴파일하고, Matcher 클래스로 입력 문자열과 비교하는 전통적인 방식입니다.

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SampleTest {
    public static void main( String args[] ) {
        String regex = "^.*[\\(\\)].*$";
        // 사용자로부터 입력을 읽음
        Scanner sc = new Scanner(System.in);
        System.out.println("Enter data: ");
        String input = sc.nextLine();
        // Pattern 클래스 인스턴스 생성
        Pattern pattern = Pattern.compile(regex);
        // Matcher 클래스 인스턴스 생성
        Matcher matcher = pattern.matcher(input);
        // 매칭 발생 여부 확인
        if(matcher.find()) {
            System.out.println("Input accepted");
        }else {
            System.out.println("Not accepted");
        }
    }
}

실행 결과 1

Enter data:
sample(text) with parenthesis
Input accepted

입력 문자열에 괄호가 포함되어 있으므로 매칭에 성공해 "Input accepted"가 출력됩니다.

실행 결과 2

Enter data:
sample text
Not accepted

반면 괄호가 없는 문자열은 조건에 맞지 않아 "Not accepted"가 출력됩니다.

예제 2: String.matches() 메서드 활용

Pattern과 Matcher 객체를 직접 다루지 않고도 String 클래스의 matches() 메서드를 사용하면 더 간결하게 동일한 검사를 수행할 수 있습니다.

import java.util.Scanner;
public class Example {
    public static void main(String args[]) {
        // 사용자로부터 문자열 입력받기
        System.out.println("Enter email address: ");
        Scanner sc = new Scanner(System.in);
        String e_mail = sc.nextLine();
        // 정규 표현식
        String regex = "^.*[\\(\\)].*$";
        boolean result = e_mail.matches(regex);
        if(result) {
            System.out.println("Valid match");
        } else {
            System.out.println("Invalid match");
        }
    }
}

실행 결과 1

Enter email address:
sample(text) with parenthesis
Valid match

괄호가 포함된 입력이므로 "Valid match"가 출력됩니다.

실행 결과 2

Enter email address:
sample text
Invalid match

괄호가 없는 입력에는 패턴이 일치하지 않아 "Invalid match"가 출력됩니다.

정리

두 예제 모두 같은 정규식 "^.*[\\(\\)].*$"를 사용하지만, Pattern·Matcher 조합은 find() 메서드로 유연하게 부분 일치를 처리할 수 있고, String.matches()는 전체 문자열 기준의 간편한 검증에 적합합니다. 상황에 맞는 방식을 선택해 사용하면 됩니다.