ABOUT ME

Today
Yesterday
Total
  • 정규식
    Android 2020. 1. 15. 11:21

    매칭 될 문자(string)를 지정 or 제외하는 방법

    정규식 설명
    [qwe] q,w,e 중 하나이면 일치
    [^qwe] q,w,e를 제외한 다른 글자면 일치
    [a-zA-Z] (a~z || A~Z) 중 하나라면 일치
    [a-c[f-h]] (a~c || f~h) 중 하나라면 일치 (합집합)
    [a-z&&[qwe]] a~z까지 중 q,w,e 중 하나라도 있다면 일치 (교집합)
    [a-z&&[^we]] a~z까지 중 w,e를 제외한 문자 중 하나라면 일치 (차집합)
    [a-z&&[^c-f]] a~z까지 중 c~f를 제외한 문자 중 하나라면 일치 (차집합)

    미리 정의된 문자(string)를 지정하는 방법

    정규식 설명
    , 임의의 문자 (단 \는 포함되지 않는다.)
    \d 숫자 문자 [0-9]
    \D 숫자 문자가 아닌것 [^0-9]
    \s 공백 문자 [\t, \n, \f, \r]
    \S 공백 문자가 아닌것 [^\s]
    \w 알파벳 단어 문자 [a-zA-Z_0-9]
    \W 알파벳 단어 문자가 아닌것 [^\w]
    (?!) 대소문자를 구별하지 않음
    \ 확장 문자로 \ 다음 일반 문자가 오면 특수문자로 취급, \ 다음 특수문자가 오면 그 문자 자체를 의미함

     


    수량 확인

    Greedy Reluctant Possessive 설명
    a? a?? a?+ a가 없거나 한번 나옴
    [a-z]* [a-z]*? [a-z]*+ a~z 중 해당되는 문자가 없거나 한번 이상 나옴
    a+ a+? a++ a가 한번 또는 여러번 나옴
    a{n} a{n}? a{n}+ a가 정확하게 n번 나옴
    a{n,} a{n,}? a{n,}+ a가 n번 이상 나옴
    a{n,m} a{n,m}? a{n,m}+ a가 n번 이상 m번 이하로 나옴
      0 1 2+ n~m
    ? 매치됨 매치됨    
    * 매치됨 매치됨 매치됨  
    +   매치됨 매치됨  
    {n,m}       매치됨

    Greedy : 입력된 문자열 전체를 읽어 확인한 뒤 한자씩 빼면서 끝까지 확인

    Reluctant : 입력된 문자열에서 한글자씩 확인해 나가며 마지막에 전체 문자열을 확인

    Possessive : 입력된 전체 문자열을 확인

     


    경계조건

    정규식 설명
    ^ 행의 시작
    $ 행의 끝
    [] 문자의 집합이나 범위를 나타냄
    {} 횟수 또는 범위를 나타냄
    () 소괄호 안의 문자를 하나의 문자로 인식
    | 패턴 안에서 or 연산을 수행할 때 사용

     


    위 정규식으로만 했을때의 간단한 예제

        fun call() {
            val digits = "0-9"
            val hexDigits = "A-Fa-f"
            val sign = "+-"
            val string = "+1234 -FFFF not-a-number"
    
            val hexNumberRegex = Regex("[$sign]?[$digits$hexDigits]+")
            val regex = """[$sign]?[$digits$hexDigits]+""".toRegex()
    
            regex.findAll(string).let {
                for (match in it) println(match.value)
            }
        }
        
    // 출력값
    // +1234
    // -FFFF
    // -a
    // be

     

    'Android' 카테고리의 다른 글

    Android Standby Bucket  (0) 2022.07.01
    Android - Safety Net API (에뮬레이터 감지 및 루팅 감지)  (0) 2022.02.11
    Component - Service  (0) 2021.10.24
    Component - Activity  (0) 2021.10.01
    scope storage 간단하게 정리  (0) 2021.07.08
Designed by Tistory.