IMCAT.DEV
로그인 가입
Scala 중급 문법

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])

코드 한 줄씩 동작 설명

  1. import scala.util.matching.Regex: 정규 표현식을 사용하기 위해 필요한 패키지를 임포트합니다.
  2. val text = "문의는 [email protected]으로 해주세요.": 검색할 문자열을 정의합니다.
  3. val emailPattern: Regex = "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}".r: 이메일 형식의 패턴을 정의합니다.
  4. val foundEmails = emailPattern.findAllIn(text).toList: 주어진 문자열에서 패턴에 맞는 모든 이메일 주소를 찾습니다.
  5. println(foundEmails): 찾은 이메일 주소를 출력합니다.
  6. 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입니다.")
    }

    5. 흔한 실수와 주의사항

    실수 1: 메타문자 사용 시 이스케이핑을 잊기

    • 잘못된 코드: val pattern = "[a-zA-Z0-9.]" (마침표가 문자 그대로 인식됨)
    • 올바른 코드: val pattern = "[a-zA-Z0-9\\.]" (마침표를 이스케이프 처리)
    • 실수 2: 패턴의 경계를 잊기

    • 잘못된 코드: val pattern = "abc" (abc가 포함된 모든 문자열을 찾음)
    • 올바른 코드: val pattern = "\\babc\\b" (abc라는 단어만 찾음)
    • 6. 정리

    • 정규 표현식은 문자열 처리에서 필수적인 도구입니다.
    • 메타문자와 패턴을 이해하고 활용하는 것이 중요합니다.
    • 실무에서 자주 사용하는 이메일, 전화번호, URL 검증 패턴을 익히면 유용합니다.
    • 다음에 학습하면 좋은 주제는 "Scala의 고급 정규 표현식"이나 "문자열 처리 성능 최적화"입니다.