정규식(regular expression)에서 대괄호 [ ] 안에 일치시키려는 문자들을 묶어 지정할 수 있습니다. 즉, 메타 문자이자 하위 표현식인 [ ]는 그 안에 나열된 문자 중 하나와 일치합니다. 따라서 문자열에 포함된 모든 영어 모음을 찾으려면 아래와 같이 대괄호 안에 모음 글자들을 나열하기만 하면 됩니다.
[aeiouAEIOU]
위 패턴은 소문자 a, e, i, o, u와 대문자 A, E, I, O, U 중 어느 하나라도 입력 문자열에 등장하면 일치하는 것으로 처리합니다.
예제 1: Pattern과 Matcher 클래스 사용
java.util.regex 패키지의 Pattern 클래스로 정규식을 컴파일한 뒤, Matcher 객체의 find() 메서드를 호출하면 입력 문자열 안에 해당 패턴이 존재하는지 확인할 수 있습니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MatchVowels {
public static void main( String args[] ) {
String regex = "[aeiouAEIOU]";
System.out.println("문자열을 입력하세요: ");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
// 정규식 컴파일
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(input);
if(matcher.find()) {
System.out.println("입력한 문자열에는 모음이 포함되어 있습니다.");
} else {
System.out.println("입력한 문자열에는 모음이 포함되어 있지 않습니다.");
}
}
}실행 결과
문자열을 입력하세요: hello how are you welcome 입력한 문자열에는 모음이 포함되어 있습니다.
예제 2: String.matches() 메서드 사용
별도의 Pattern, Matcher 객체 없이 String 클래스의 matches() 메서드만으로도 정규식 검사를 수행할 수 있습니다. 다만 주의할 점은 matches() 메서드가 문자열 전체가 정규식과 일치해야 true를 반환한다는 것입니다. 따라서 문자열 어디에든 모음이 존재하는지 확인하려면 아래와 같이 임의의 문자를 의미하는 .* 를 패턴 앞뒤에 붙여야 합니다.
import java.util.Scanner;
public class Test {
public static void main( String args[] ) {
String regex = ".*[aeiouAEIOU].*";
System.out.println("문자열을 입력하세요: ");
Scanner sc = new Scanner(System.in);
String input = sc.nextLine();
boolean result = input.matches(regex);
if(result) {
System.out.println("입력한 문자열에는 모음이 포함되어 있습니다.");
} else {
System.out.println("입력한 문자열에는 모음이 포함되어 있지 않습니다.");
}
}
}실행 결과
문자열을 입력하세요: hello how are you welcome 입력한 문자열에는 모음이 포함되어 있습니다.
핵심 정리
- [aeiouAEIOU]: 대소문자 영어 모음 한 글자와 일치하는 문자 클래스입니다.
- Matcher.find(): 문자열 내에 패턴이 하나라도 존재하면 true를 반환하므로 부분 일치 검사에 적합합니다.
- String.matches(): 문자열 전체가 패턴과 일치해야 하므로, 부분 일치를 원한다면 .* 를 함께 사용해야 합니다.