정규 표현식 in Kotlin

ddanglehee·2022년 10월 4일
0

TIL

목록 보기
5/9

📌 정규 표현식

정규 표현식(Regular Expressions)은 복잡한 문자열을 패턴/규칙으로 표현하여 처리하는 기법이다. 정규 표현식은 줄여서 "정규식"이라고도 부른다.

📍 정규 표현식의 메타 문자

"메타 문자"란, 원래 그 문자가 가진 뜻이 아닌 특별한 용도로 사용하는 문자를 말한다.

. : 개행 문자(\n)를 제외한 문자 하나를 의미한다. a.b는 a와 b 사이에 문자 하나가 있는 문자열을 의미한다.

[^] : not을 의미한다. [^0-9]는 숫자가 아닌 문자를 의미한다.

^ : 문자열의 시작을 의미한다. ^kotlin은 문자열의 시작은 무조건 kotlin이어야함을 의미한다.

$ : 문자열의 끝을 의미한다. kotlin$은 문자열의 마지막은 무조건 kotlin이어야함을 의미한다.

[] : 대괄호에 있는 문자들 중 하나의 문자를 의미한다. [a-zA-Z]는 알파벳 대소문자 중 하나의 문자임을 의미한다.

| : or을 의미한다. a|b는 a 또는 b를 의미한다.

{} : 반복을 의미한다. a{2}b는 aab를 의미하고, a{2, }는 a가 2번 이상 반복됨을 의미하고, a{2, 5}는 a가 2번 이상 5번 이하 반복됨을 의미한다.

* : 문자가 0회 이상 반복됨을 의미한다. a*는 a가 0번 이상 반복됨을 의미한다. { , a, aa, ...}

+ : 문자가 1회 이상 반복됨을 의미한다. a+는 a가 1번 이상 반복됨을 의미한다. {a, aa, aaa, ...}

? : 문자가 0회 또는 1회 나옴을 의미한다. a?b는 {b, ab}이다.

\ : 이스케이프 처리를 의미한다. \s는 "\s"문자열로 처리된다.(whitespace가 아니라)

📍 정규 표현식 in Kotlin

Kotlin에서는 Regex 클래스의 객체를 이용해서 정규 표현식을 처리한다.

🖍 Regex 클래스의 객체 만들기

Regex("pattern")

예시 ) val reg = Regex("[a-zA-Z0-9]+")

val reg = "pattern".toRegex()

예시) val reg = "[a-zA-Z0-9]+".toRegex()

🖍 정규 표현식과 정확히 일치하는지 확인하기 (matchEntire())

val matchResult: MatchResult? = regex.matchEntire("A1B2")

일치한다면 regex.matchEntire()는 MatchResult 객체를 반환하고,
일치하지 않으면 null을 반환한다.

🖍 MatchResult 클래스

Regex 클래스의 메서드들은 MatchResult 클래스 객체에 결과값을 담아서 반환한다.

❣️ 결과 확인 (MatchResult.value, MatchResult.range, MatchResult.next())

  • MatchResult 클래스는 value안에 정규 표현식과 일치하는 결과들을 문자열로 담고 있다.
    val matchResult: MatchResult? = Regex("[\\w]+").find("abcde;12345;a1b2c3d4e5")
     val value = matchResult!!.value
     println(value) // abcde
  • range로 정규 표현식과 일치하는 문자열이 입력값의 몇번째 인덱스에 위치하는지를 알아낼 수 있다.
    val matchResult: MatchResult? = Regex("[\\w]+").find("abcde;12345;a1b2c3d4e5")
     println(matchResult.range) // 0..4
  • next()로 다음으로 정규 표현식과 일치하는 결과를 얻어낼 수 있다. 단, 더이상 결과가 존재하지 않는다면 null을 반환한다.
    val matchResult: MatchResult = Regex("[\\w]+").find("abcde;12345;a1b2c3d4e5")!!
     println(matchResult.value) // abcde
     println(matchResult.next()?.value) // 12345
     println(matchResult.next()?.next()?.value) // a1b2c3d4e5
     println(matchResult.next()?.next()?.next()) // null

참고
코틀린에서 정규 표현식 사용하기

profile
잊고싶지 않은 것들을 기록해요✏️

0개의 댓글