정규식(Regular Expression)은 입력 텍스트를 검색하거나 처리하기 위한 패턴을 정의하는 특수 문자열입니다. 하나 이상의 문자로 구성될 수 있으며, 정규식을 활용하면 문자열을 손쉽게 검색하거나 치환할 수 있습니다.
Java는 정규식 기반의 패턴 매칭을 위해 java.util.regex 패키지를 제공합니다. 이 패키지의 핵심인 Pattern 클래스는 컴파일된 정규식의 표현체 역할을 하며, 문자열과 정규식을 매칭하기 위해 다음 두 가지 메서드를 제공합니다.
- compile(): 정규식을 나타내는 String을 인수로 받아, 컴파일된 Pattern 객체를 반환합니다.
- matcher(): String 값을 인수로 받아, 현재 Pattern 객체가 나타내는 패턴과 주어진 문자열을 비교할 수 있는 Matcher 객체를 생성합니다.
예제 코드
다음 Java 프로그램은 사용자로부터 문자열을 입력받아, 해당 문자열에 알파벳(대소문자 모두)이 포함되어 있는지 검사합니다. 여기에 숫자도 함께 허용하도록 패턴을 구성했습니다.
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Test {
public static void main( String args[] ) {
String regex = "[a-zA-Z][0-9]?";
Scanner sc = new Scanner(System.in);
System.out.println("Enter an input string: ");
String input = sc.nextLine();
//Pattern 객체 생성
Pattern p = Pattern.compile(regex);
//Matcher 객체 생성
Matcher m = p.matcher(input);
if(m.find()) {
System.out.println("Match occurred");
}else {
System.out.println("Match not occurred");
}
}
}패턴 해설
위 예제에서 사용된 정규식 [a-zA-Z][0-9]?의 의미는 다음과 같습니다.
[a-zA-Z]: 알파벳 대문자 또는 소문자 한 글자와 일치합니다.[0-9]?: 숫자 한 글자가 있거나 없어도 됩니다(?는 0회 또는 1회 출현을 의미).
실행 결과 1
Enter an input string: sample text Match occurred
실행 결과 2
Enter an input string: sample text 34 56 Match occurred
이처럼 Pattern.compile()로 정규식을 컴파일하고, Matcher 객체의 find() 메서드를 호출하면 입력 문자열 내에서 패턴과 일치하는 부분이 존재하는지 간단히 확인할 수 있습니다.