Skils/Kotlin

[Kotlin]-정규표현식

재한 2023. 8. 10. 01:11

코틀린에서 특정 문자열이 포함되어 있는지 아닌지를 판별하기 위해 사용되는 정규표현식을 적을까 합니다.

우선 정규표현식의 정의를 알아볼 건데 아래 내용은 위키피디아에서 가져왔습니다.

정규표현식이란?

특정한 규칙을 가진 문자열의 집합을 표현하는 데 사용되는 형식 언어 (위키피디아)

 

그렇다면 정규표현식은 어떠한 상황에서 사용될까요?

  • 휴대폰번호를 입력받는데, 휴대폰 번호의 양식과 일치하는지 판별(숫자만 와야 함)
  • email를 입력받는데, @가 있는지,
  • 비밀번호 양식 (몇 글자이상, 특수문자 한 글자 포함, 대문자 한글자 포함 등등)

이러한 예외처리를 if문을 통해서 할 경우 굉장히 코드가 복잡해지고, 더러워집니다. 따라서 코틀린에서는 Regex를 제공해서 문자열에서

특정 문자열이 포함되어 있는지를 판별해 줍니다.


정규 표현식 문법

  • ^ : 문자열의 시작
    • """^Condition"""  -> Condition으로 시작하는 문자열인가?
  • $ : 문자열의 끝
  • . : 임의의 한 문자 
  • [ ] : 대괄호에 있는 문자 중 한 개를 의미 
    • [ABC]는 A, B, C 중 하나
  • [^] : not
    • [^ABC]는 A, B, C를 제외
  • | : or
    • A|B는 A or B를 의미
  • ? :? 바로 앞의 문자가 0개 또는 1개
    • A? B는 AB , B를 의미
  • * :  * 바로 앞의 문자가 0개 이상
    • A*B는 B,AB, AAB, AAAB 
  • + : + 바로 앞의 문자가 1개 이상
    • A+B는 AB,AAB,AAAB
  • { N } : 문자가 N개 반복
    • A {2} B는 AAB
  • {N,} : 문자가 N개 이상 반복
    • A {2,} B는 AAB, AAAB, AAAAB
  • \s : 공백제거
  • \d : 숫자를 의미
    • \d와 [0-9]는 의미가 동일하다. 숫자만을 의미
  • \w : 숫자와 알파벳을 의미
    • \w는 [a-zA-z0-9]와 동일하다

코틀린 정규표현식 생성

Regex 클래스

Regex 클래스의 생성자를 이용해서 정규표현식을 만들 수 있습니다.

아래 정규식은 웹주소 형식이 맞는지 아닌지를 판단하는 것입니다.

val regexHttp = Regex("https://(.+)")

toRegex()

val alphaRegex = "[a-Z]".toRegex()

삼중따옴표

val conditionRegex = """^Condition:\s*(\S+)([=><])(\S+)$""".toRegex() //Condition: A=B

 


사용방법

matches

검사하고자 하는 문자열이 정규식을 만족하는지 확인하는 함수이다.
만족한다면 true, 만족하지 않는다면 false를 반환한다.

위에서 배운 정규표현식 문법을 통해서 문자열이 알파벳으로만 존재하는지 확인해 보자

해당  정규식은 알파벳인지 판단하는 정규식이다. 

input으로 Ab가 정규식을 만족하는지 확인했고, 결과는 당연하게 true가 나올 것이다.

input으로 숫자가 섞여있기에, matches의 결과가 false가 나온 것을 알 수 있다.

 

Destructuring

해당 정규식은 Condition: 공백문자제외 =,>, < 공백문자제외를 검사합니다.

여기서 문자, 특수문자, 문자를 지정된 변수에 할당해 줄 수 있습니다.

출력결과는 content에는 A가, operand에는 = , value에는 B가 할당됩니다.