Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

밤빵's 개발일지

[TIL]20241016 정규표현식(Regex) 본문

Kotlin

[TIL]20241016 정규표현식(Regex)

최밤빵 2024. 10. 16. 20:20

코틀린을 공부하면서 정규 표현식(Regex)에 대해 알아야하는 날이 왔다... 정규 표현식은 문자열에서 특정 패턴을 찾거나 변환하는 데 유용한 도구로, 데이터 처리나 문자열 검증에서 자주 사용된다. 자바에서도 Pattern 클래스와 Matcher를 사용해 정규 표현식을 사용할 수 있지만, 코틀린에서는 Regex 클래스를 통해 보다 간편하게 정규 표현식을 처리할 수 있다. 

 

▶정규 표현식(Regex)이란?

정규 표현식(Regular Expression, Regex)은 문자열에서 패턴을 정의하고, 그 패턴에 맞는 문자열을 검색하거나 변환하는 데 사용되는 언어이다. 예를 들어, 이메일 주소나 전화번호와 같이 특정 형식을 가진 문자열을 쉽게 검증할 수 있다. 정규 표현식의 기본적인 활용은 다음과 같다.

  • 문자열이 특정 패턴을 만족하는지 검사
  • 문자열에서 특정 패턴을 검색 및 추출
  • 문자열을 특정 패턴에 맞춰 변환

▶코틀린에서 Regex 클래스 사용법

코틀린에서는 Regex 클래스를 사용해 문자열 패턴을 검사하거나 처리할 수 있다. 이 클래스는 여러 가지 유용한 메서드를 제공하고, 간단하게 정규 표현식을 적용할 수 있다.

  • matches(): 전체 문자열이 패턴에 맞는지 검사
  • containsMatchIn(): 문자열 내에 패턴에 맞는 부분이 있는지 검사
  • find(): 패턴에 맞는 첫 번째 부분을 찾음
  • findAll(): 패턴에 맞는 모든 부분을 찾아 리스트로 반환
  • replace(): 패턴에 맞는 부분을 다른 문자열로 변환

▶ Regex 클래스 활용 예시

 

▷문자열 패턴 검사

정규 표현식을 활용해 문자열이 특정 패턴과 일치하는지 검사할 수 있다.

ex) 이메일 주소가 유효한지 검사하는 정규 표현식

fun main() {
    val emailPattern = Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\$")
    val email = "example@test.com"

    if (emailPattern.matches(email)) {
        println("유효한 이메일 주소입니다.")
    } else {
        println("유효하지 않은 이메일 주소입니다.")
    }
}

Regex("^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}\$"): 이메일 패턴을 정의한 정규 표현식이다. 이 패턴은 이메일 주소가 일반적으로 가지는 형식(문자+@+도메인.확장자)을 나타낸다.

matches(email): email 변수가 이 정규 표현식에 맞는지 검사하고, 결과를 반환한다.

 

▷문자열에서 패턴 찾기

문자열에서 특정 패턴에 맞는 부분을 찾고 싶을 때는 find()나 containsMatchIn() 메서드를 사용할 수 있다.

ex)문자열에서 숫자만 추출하는 방법

fun main() {
    val text = "전화번호는 010-1234-5678입니다."
    val numberPattern = Regex("\\d+")

    val numbers = numberPattern.findAll(text).map { it.value }.toList()
    println("숫자 추출: $numbers")
}

→ Regex("\\d+"): 숫자를 찾는 정규 표현식이다. \\d는 숫자를 의미하며, +는 1개 이상의 연속된 숫자를 의미한다.

→ findAll(text): 문자열에서 숫자 패턴을 모두 찾아서 반환한다.

→ map { it.value }: 찾아낸 패턴의 값을 추출하여 리스트로 변환한다.

 

▷문자열 변환

정규 표현식을 활용해 문자열의 특정 부분을 다른 값으로 변환할 수 있다.

ex)텍스트에서 모든 공백을 하이픈(-)으로 변환

fun main() {
    val text = "안녕하세요. 코틀린 정규 표현식을 학습하고 있습니다."
    val result = text.replace(Regex("\\s+"), "-")

    println(result)
}

→ Regex("\\s+"): 공백을 의미하는 정규 표현식이다. \\s는 공백(스페이스, 탭, 줄바꿈)을 의미하며, +는 1개 이상의 연속된 공백을 의미한다.

→ replace(Regex("\\s+"), "-"): 문자열의 모든 공백을 하이픈으로 변환한다.

 

▶ 복잡한 패턴 처리

정규 표현식을 사용하면 복잡한 패턴도 간단하게 처리할 수 있다.

ex)날짜 형식(YYYY-MM-DD)을 확인하는 정규 표현식

fun main() {
    val datePattern = Regex("\\d{4}-\\d{2}-\\d{2}")
    val date = "2023-10-10"

    if (datePattern.matches(date)) {
        println("유효한 날짜 형식입니다.")
    } else {
        println("유효하지 않은 날짜 형식입니다.")
    }
}

→ Regex("\\d{4}-\\d{2}-\\d{2}"): 4자리 숫자-2자리 숫자-2자리 숫자로 이루어진 날짜 패턴이다.

→ matches(date): 날짜 형식이 정규 표현식과 일치하는지 검사한다.

 

▶자주 사용하는 정규 표현식 패턴

코틀린에서 자주 사용하는 정규 표현식 패턴은 다음과 같다.

  • 숫자: \\d+ - 하나 이상의 숫자
  • 알파벳: [A-Za-z]+ - 하나 이상의 알파벳 문자
  • 공백: \\s+ - 하나 이상의 공백 문자
  • 특수 문자: [!@#\$%^&*(),.?":{}|<>] - 특수 문자

▶정규 표현식의 장점과 주의점

정규 표현식은 복잡한 문자열 패턴을 매우 간단하게 처리할 수 있는 유용한 도구이지만, 남용하면 오히려 가독성을 해칠 수 있다. 너무 복잡한 정규 표현식은 코드의 유지보수를 어렵게 할 수 있으므로, 필요한 경우에만 적절하게 사용하는 것이 좋다.

'Kotlin' 카테고리의 다른 글

[TIL]20241018 const 와 val의 차이  (0) 2024.10.19
[TIL]20241017 const  (0) 2024.10.17
[TIL]20241015 if-else 표현식  (0) 2024.10.15
[TIL]20241014 is & as 연산자  (0) 2024.10.14
[TIL]20241013 스마트캐스팅(Smart Casting)  (0) 2024.10.13