소개
이 랩에서는 Java 에서 문자열이 정규 표현식 (regular expression) 과 일치하는지 확인하는 방법을 배우게 됩니다. 먼저 정규 표현식의 기본 사항과 java.util.regex 패키지를 사용하여 간단한 패턴을 만드는 방법을 이해하는 것으로 시작합니다.
그런 다음 Pattern 및 Matcher 클래스를 탐색하여 일치 연산을 수행합니다. 마지막으로, 사용자 입력을 사용하여 정규 표현식 패턴을 테스트하는 데 지식을 적용하여 Java 에서 문자열 유효성 검사 및 조작을 위해 정규 표현식을 사용하는 실질적인 경험을 얻게 됩니다.
기본 정규 표현식 패턴 생성
이 단계에서는 정규 표현식 (regex) 이 무엇인지, 그리고 Java 에서 기본 패턴을 만드는 방법을 이해하는 것으로 시작합니다.
정규 표현식은 텍스트 문자열을 일치시키고 조작하는 데 사용되는 강력한 도구입니다. 텍스트 내의 패턴을 설명하기 위한 미니 언어라고 생각할 수 있습니다. 특정 텍스트 검색, 입력 형식 (이메일 주소 또는 전화 번호 등) 유효성 검사, 패턴 기반 텍스트 대체와 같은 작업에 매우 유용합니다.
Java 에서 정규 표현식은 java.util.regex 패키지에서 처리됩니다. 우리가 사용할 두 가지 주요 클래스는 Pattern과 Matcher입니다.
Pattern: 이 클래스는 컴파일된 정규 표현식을 나타냅니다. 정규 표현식 문자열을Pattern객체로 컴파일합니다.Matcher: 이 클래스는Pattern을 해석하여 입력 문자열에 대한 일치 연산을 수행하는 데 사용됩니다.
기본 정규 표현식 패턴을 정의하고 출력하는 간단한 Java 프로그램을 만들어 보겠습니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다 (아직 열려 있지 않은 경우).파일의 전체 내용을 다음 코드로 바꿉니다.
import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { // Define a simple regex pattern to match the word "Java" String regexPattern = "Java"; // Compile the regex pattern Pattern pattern = Pattern.compile(regexPattern); // Print the pattern System.out.println("Our regex pattern is: " + pattern.pattern()); } }새로운 부분을 살펴보겠습니다.
import java.util.regex.Pattern;: 이 줄은 정규 표현식 작업을 위해 필요한Pattern클래스를 가져옵니다.String regexPattern = "Java";: 이 줄은 정규 표현식을 담고 있는 간단한 문자열 변수regexPattern을 정의합니다. 이 경우 패턴은 단순히 리터럴 단어 "Java"입니다.Pattern pattern = Pattern.compile(regexPattern);: 여기서 정규 표현식 문자열을Pattern객체로 컴파일합니다.Pattern.compile()메서드는 정규 표현식 문자열을 인수로 받아Pattern객체를 반환합니다.System.out.println("Our regex pattern is: " + pattern.pattern());: 이 줄은Pattern객체를 생성하는 데 사용된 원래 정규 표현식 문자열을 출력합니다.Pattern객체의pattern()메서드는 정규 표현식 문자열을 반환합니다.
파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
이제 프로그램을 컴파일해 보겠습니다. WebIDE 하단의 터미널을 열고
~/project디렉토리에 있는지 확인합니다. 다음 명령을 실행합니다.javac HelloJava.java오류가 없으면
HelloJava.class파일이~/project디렉토리에 생성됩니다.마지막으로, 컴파일된 프로그램을 실행합니다.
java HelloJava다음 출력을 볼 수 있습니다.
Our regex pattern is: Java이것은 기본 정규 표현식 패턴이 성공적으로 정의되고 컴파일되었음을 확인합니다. 다음 단계에서는 이 패턴을 사용하여 주어진 문자열에서 일치 항목을 찾습니다.
Pattern 및 Matcher 클래스 사용
이 단계에서는 주어진 입력 문자열 내에서 패턴의 발생을 찾기 위해 Matcher 클래스를 Pattern과 함께 사용하는 방법을 배우게 됩니다.
이전 단계에서 논의했듯이, Pattern 클래스는 컴파일된 정규 표현식을 나타냅니다. Matcher 클래스는 컴파일된 패턴을 사용하여 특정 입력 문자열에 대해 실제로 검색 작업을 수행하는 데 사용됩니다.
일반적으로 프로세스는 다음과 같이 작동합니다.
- 정규 표현식 컴파일:
Pattern.compile()을 사용하여 정규 표현식 문자열에서Pattern객체를 생성합니다. - Matcher 생성: 검색하려는 입력 문자열을 전달하여
Pattern객체에서matcher()메서드를 호출하여Matcher객체를 가져옵니다. - 일치 수행:
Matcher객체의 메서드를 사용하여 일치 항목을 찾습니다. 일반적인 메서드에는find()(다음 일치 항목 찾기) 및matches()(전체 입력 문자열이 패턴과 일치하는지 확인) 가 있습니다.
HelloJava.java 프로그램을 수정하여 Matcher를 사용하여 샘플 문장에서 "Java"라는 단어를 찾아보겠습니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다.기존 코드를 다음으로 바꿉니다.
import java.util.regex.Matcher; import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { // Define a simple regex pattern to match the word "Java" String regexPattern = "Java"; // The input string to search within String inputString = "Hello, Java! Welcome to Java programming."; // Compile the regex pattern Pattern pattern = Pattern.compile(regexPattern); // Create a Matcher object Matcher matcher = pattern.matcher(inputString); // Find and print the matches System.out.println("Searching for pattern: '" + regexPattern + "' in string: '" + inputString + "'"); while (matcher.find()) { System.out.println("Found match at index: " + matcher.start()); } } }새로운 내용은 다음과 같습니다.
import java.util.regex.Matcher;:Matcher클래스를 가져옵니다.String inputString = "Hello, Java! Welcome to Java programming.";: 검색하려는 문자열을 정의합니다.Matcher matcher = pattern.matcher(inputString);:pattern객체에서matcher()메서드를 호출하고inputString을 전달하여Matcher객체를 생성합니다.while (matcher.find()) { ... }: 이 루프는Matcher의find()메서드를 사용합니다.find()메서드는 패턴과 일치하는 입력 시퀀스의 다음 하위 시퀀스를 찾으려고 시도합니다. 일치 항목이 발견되면true를 반환하고, 그렇지 않으면false를 반환합니다.find()가true를 반환하는 동안while루프가 계속됩니다.System.out.println("Found match at index: " + matcher.start());: 루프 내에서 일치 항목이 발견되면matcher.start()는 입력 문자열에서 일치하는 하위 시퀀스의 시작 인덱스를 반환합니다. 이 인덱스를 출력합니다.
파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
터미널에서 수정된 프로그램을 컴파일합니다.
javac HelloJava.java컴파일된 프로그램을 실행합니다.
java HelloJava다음과 유사한 출력을 볼 수 있습니다.
Searching for pattern: 'Java' in string: 'Hello, Java! Welcome to Java programming.' Found match at index: 7 Found match at index: 27이 출력은 프로그램이 입력 문자열에서 "Java"라는 단어의 두 번의 발생을 성공적으로 찾았고 각 일치의 시작 인덱스를 출력했음을 보여줍니다.
이제 Pattern 및 Matcher 클래스를 사용하여 문자열 내에서 특정 패턴을 성공적으로 찾았습니다. 다음 단계에서는 사용자가 검색할 문자열을 입력할 수 있도록 하여 이 프로그램을 대화형으로 만들 것입니다.
사용자 입력으로 정규 표현식 테스트
이 마지막 단계에서는 사용자가 검색하려는 문자열을 입력할 수 있도록 하여 정규 표현식 프로그램을 대화형으로 만들 것입니다. 이렇게 하면 프로그램이 더 유연해지고 정규 표현식을 사용자 상호 작용과 결합하는 방법을 보여줍니다.
사용자로부터 입력을 읽기 위해 "첫 번째 Java Lab"에서 기억할 수 있는 Scanner 클래스를 사용합니다.
WebIDE 편집기에서
HelloJava.java파일을 엽니다.기존 코드를 다음으로 바꿉니다.
import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HelloJava { public static void main(String[] args) { // Define a simple regex pattern to match the word "Java" String regexPattern = "Java"; // Create a Scanner object to read user input Scanner scanner = new Scanner(System.in); // Prompt the user to enter a string System.out.print("Enter the string to search within: "); String inputString = scanner.nextLine(); // Compile the regex pattern Pattern pattern = Pattern.compile(regexPattern); // Create a Matcher object Matcher matcher = pattern.matcher(inputString); // Find and print the matches System.out.println("Searching for pattern: '" + regexPattern + "' in string: '" + inputString + "'"); boolean found = false; while (matcher.find()) { System.out.println("Found match at index: " + matcher.start()); found = true; } if (!found) { System.out.println("No match found."); } // Close the scanner scanner.close(); } }변경 사항은 다음과 같습니다.
import java.util.Scanner;:Scanner클래스를 가져옵니다.Scanner scanner = new Scanner(System.in);: 콘솔에서 입력을 읽기 위해Scanner객체를 생성합니다.System.out.print("Enter the string to search within: ");: 사용자에게 문자열을 입력하라는 메시지를 표시합니다.String inputString = scanner.nextLine();: 사용자로부터 입력된 전체 줄을 읽어inputString변수에 저장합니다.- 일치 항목이 없으면 메시지를 출력하기 위해
boolean found = false;변수와if (!found)블록을 추가했습니다. scanner.close();: 시스템 리소스를 해제하기 위해Scanner를 닫습니다.
파일을 저장합니다 (Ctrl+S 또는 Cmd+S).
터미널에서 프로그램을 컴파일합니다.
javac HelloJava.java프로그램을 실행합니다.
java HelloJava이제 프로그램은 문자열을 입력할 때까지 기다립니다. "Java"라는 단어를 포함하는 문자열 (또는 포함하지 않는 문자열) 을 입력하고 Enter 키를 누릅니다.
예를 들어, 다음을 입력하는 경우:
Learning Java is fun!출력은 다음과 같습니다.
Enter the string to search within: Learning Java is fun! Searching for pattern: 'Java' in string: 'Learning Java is fun!' Found match at index: 9다음을 입력하는 경우:
Python is also great.출력은 다음과 같습니다.
Enter the string to search within: Python is also great. Searching for pattern: 'Java' in string: 'Python is also great.' No match found.
이제 사용자가 제공한 문자열에서 패턴을 검색하기 위해 정규 표현식을 사용하는 대화형 Java 프로그램을 성공적으로 만들었습니다. 이것은 정규 표현식이 실제 응용 프로그램에서 사용될 수 있는 실용적인 예입니다.
요약
이 Lab 에서는 java.util.regex 패키지에 중점을 두고 Java 에서 정규 표현식 (regex) 의 기본 사항을 이해하는 것으로 시작했습니다. 정규 표현식이 문자열에서 패턴 일치 및 조작을 위한 강력한 도구이며, 핵심 클래스는 Pattern과 Matcher임을 배웠습니다. 그런 다음 간단한 문자열을 정의하고 Pattern.compile()을 사용하여 이를 Pattern 객체로 컴파일하여 기본 정규 표현식 패턴을 생성하는 연습을 했습니다. 이를 통해 Java 프로그램에서 기본 정규 표현식 패턴을 정의하고 출력하는 방법을 시연했습니다.



