밤빵's 개발일지
[TIL]20241016 정규표현식(Regex) 본문
코틀린을 공부하면서 정규 표현식(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 |