학습
Scala 정규 표현식 (Regex)
Scala 정규 표현식 (Regex) — 중급
정규 표현식 (Regex)
1. 도입 (왜 배워야 하는가)
정규 표현식(Regex)은 문자열을 다루는 프로그래머에게 매우 중요한 도구입니다. 특히 데이터 검증, 텍스트 검색 및 대체 작업에서 정규 표현식은 필수적인 역할을 합니다. 예를 들어, 사용자가 입력한 이메일 주소나 전화번호 형식을 검증하고 싶을 때 정규 표현식을 사용하면 간단한 코드로 복잡한 패턴을 확인할 수 있습니다.
정규 표현식을 모르면 문자열의 패턴을 수동으로 검사해야 하며, 이 과정은 시간이 많이 걸리고 오류가 발생하기 쉽습니다. 실무에서 비효율적인 코드로 인해 유지보수 비용이 증가하거나, 사용자에게 잘못된 정보를 제공하는 등 심각한 문제가 발생할 수 있습니다.
2. 핵심 개념 설명
정규 표현식은 문자열에서 특정 패턴을 찾기 위한 언어입니다. 이를 통해 특정 문자, 단어, 숫자 형식 등을 쉽게 찾고 조작할 수 있습니다.
관련 용어 정리
| 용어 | 설명 |
|---|---|
| 패턴 | 찾고자 하는 문자열의 형식 |
| 메타문자 | 정규 표현식에서 특별한 의미를 가지는 문자 |
| 플래그 | 정규 표현식의 동작 방식을 수정하는 옵션 |
비유하자면, 정규 표현식은 마치 도서관의 색인과 같습니다. 원하는 책을 쉽게 찾기 위해 색인(패턴)을 참조하는 것처럼, 정규 표현식은 문자열에서 원하는 정보를 쉽게 찾을 수 있게 돕습니다.
3. 기본 코드 예제
가장 기본적인 정규 표현식 사용법을 살펴보겠습니다. 아래 코드는 주어진 문자열에서 이메일 주소를 찾는 예제입니다.
import scala.util.matching.Regex
val text = "문의는 [email protected]으로 해주세요."
val emailPattern: Regex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}".r
val foundEmails = emailPattern.findAllIn(text).toList
println(foundEmails)
실행 결과
List([email protected])
코드 한 줄씩 동작 설명
import scala.util.matching.Regex: 정규 표현식을 사용하기 위해 필요한 패키지를 임포트합니다.val text = "문의는 [email protected]으로 해주세요.": 검색할 문자열을 정의합니다.val emailPattern: Regex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}".r: 이메일 형식의 패턴을 정의합니다.val foundEmails = emailPattern.findAllIn(text).toList: 주어진 문자열에서 패턴에 맞는 모든 이메일 주소를 찾습니다.println(foundEmails): 찾은 이메일 주소를 출력합니다.- 잘못된 코드:
val pattern = "[a-zA-Z0-9.]"(마침표가 문자 그대로 인식됨) - 올바른 코드:
val pattern = "[a-zA-Z0-9\\.]"(마침표를 이스케이프 처리) - 잘못된 코드:
val pattern = "abc"(abc가 포함된 모든 문자열을 찾음) - 올바른 코드:
val pattern = "\\babc\\b"(abc라는 단어만 찾음) - 정규 표현식은 문자열 처리에서 필수적인 도구입니다.
- 메타문자와 패턴을 이해하고 활용하는 것이 중요합니다.
- 실무에서 자주 사용하는 이메일, 전화번호, URL 검증 패턴을 익히면 유용합니다.
- 다음에 학습하면 좋은 주제는 "Scala의 고급 정규 표현식"이나 "문자열 처리 성능 최적화"입니다.
4. 실전 활용 예제
예제 1: 전화번호 검증
쇼핑몰에서 고객의 전화번호를 검증할 때 사용할 수 있습니다.
val phoneNumberPattern: Regex = "\\d{3}-\\d{3,4}-\\d{4}".r
val phoneNumber = "전화번호는 010-1234-5678입니다."
if (phoneNumberPattern.findFirstIn(phoneNumber).isDefined) {
println("유효한 전화번호입니다.")
} else {
println("유효하지 않은 전화번호입니다.")
}
예제 2: URL 검증
웹사이트에서 사용자가 입력한 URL이 유효한지 확인하는 데 사용할 수 있습니다.
val urlPattern: Regex = "https?://[\\w.-]+\\.[a-zA-Z]{2,}".r
val url = "웹사이트 주소는 http://example.com입니다."
if (urlPattern.findFirstIn(url).isDefined) {
println("유효한 URL입니다.")
} else {
println("유효하지 않은 URL입니다.")
}