괄호 ( 또는 ) 포함 여부를 확인하는 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()는 전체 문자열 기준의 간편한 검증에 적합합니다. 상황에 맞는 방식을 선택해 사용하면 됩니다.