ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [기타] μ •κ·œ ν‘œν˜„μ‹ (Regex)
    Swift 2022. 3. 31. 14:46

    μ •κ·œ ν‘œν˜„μ‹μ€ νŠΉμ •ν•œ κ·œμΉ™μ„ κ°–λŠ” λ¬Έμžμ—΄μ„ ν‘œν˜„ν•˜κ±°λ‚˜ 검색할 λ•Œ, 그리고 νŠΉμ • λ¬Έμžμ—΄μ— λŒ€ν•œ 검증이 ν•„μš”ν•  λ•Œ 주둜 μ‚¬μš©ν•œλ‹€.

    예λ₯Ό λ“€μ–΄ ν…μŠ€νŠΈ μ—λ””ν„°μ—μ„œ λ¬Έμžμ—΄μ„ κ²€μƒ‰ν•˜μ—¬ μΉ˜ν™˜ν•˜κ±°λ‚˜ 아이디/λΉ„λ°€λ²ˆν˜Έμ˜ μœ νš¨μ„±μ„ 검증할 λ•Œ μ‚¬μš©ν•œλ‹€.

     

    μ •κ·œ ν‘œν˜„μ‹μ—μ„œ μ‚¬μš©λ˜λŠ” 기호λ₯Ό Meta 문자라고 ν•˜λŠ”λ°, ν‘œν˜„μ‹μ—μ„œ λ‚΄λΆ€μ μœΌλ‘œ νŠΉμ • 의미λ₯Ό κ°–λŠ” 문자λ₯Ό λ§ν•˜λ©° μ •λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.

     ν‘œν˜„식
    의미
     ^x
     λ¬Έμžμ—΄μ˜ μ‹œμž‘μ„ λ‚˜νƒ€λ‚΄λ©° x 문자둜 μ‹œμž‘λ¨
    x$
     λ¬Έμžμ—΄μ˜ μ’…λ£Œλ₯Ό λ‚˜νƒ€λ‚΄λ©° x 문자둜 μ’…λ£Œλ¨
     .x
     μž„μ˜μ˜ ν•œ 문자의 자리수λ₯Ό λ‚˜νƒ€λ‚΄λ©° λ¬Έμžμ—΄μ΄ x 문자둜 끝남
     x+
     λ°˜λ³΅μ„ λ‚˜νƒ€λ‚΄λ©° x λ¬Έμžκ°€ 1번 이상 반볡됨
     x?
     μ‘΄μž¬ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λ©° x λ¬Έμžκ°€ μ‘΄μž¬ν•  μˆ˜λ„, μ‘΄μž¬ν•˜μ§€ μ•Šμ„ μˆ˜λ„ 있음
     x*
     λ°˜λ³΅ μ—¬λΆ€λ₯Ό λ‚˜νƒ€λ‚΄λ©° x λ¬Έμžκ°€ 0번 이상 반볡됨
     x|y
     orλ₯Ό λ‚˜νƒ€λ‚΄λ©° x λ˜λŠ” y λ¬Έμžκ°€ μ‘΄μž¬ν•¨
     (x)
    그룹을 λ‚˜νƒ€λ‚΄λ©° xλ₯Ό 그룹으둜 μ²˜λ¦¬ν•¨
     (x)(y)
    κ·Έλ£Ήλ“€μ˜ 집합을 λ‚˜νƒ€λ‚΄λ©° μ•žμ—μ„œ λΆ€ν„° μˆœμ„œλŒ€λ‘œ 번호λ₯Ό λΆ€μ—¬ν•˜μ—¬ κ΄€λ¦¬ν•˜κ³  x, y λŠ” 각 그룹의 λ°μ΄ν„°λ‘œ 관리됨
     (x)(?:y)
    κ·Έλ£Ήλ“€μ˜ 집합에 λŒ€ν•œ μ˜ˆμ™Έλ₯Ό λ‚˜νƒ€λ‚΄λ©° κ·Έλ£Ή μ§‘ν•©μœΌλ‘œ κ΄€λ¦¬λ˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λƒ„
     x{n}
     λ°˜λ³΅μ„ λ‚˜νƒ€λ‚΄λ©° x λ¬Έμžκ°€ n번 반볡됨
     x{n,}
     λ°˜λ³΅μ„ λ‚˜νƒ€λ‚΄λ©° x λ¬Έμžκ°€ n번 이상 반볡됨
     x{n,m}
     λ°˜λ³΅μ„ λ‚˜νƒ€λ‚΄λ©° x λ¬Έμžκ°€ μ΅œμ†Œ n번 이상 μ΅œλŒ€ m 번 μ΄ν•˜λ‘œ 반볡됨


    Meta λ¬Έμžλ“€ 쀑 μ’€ 더 νŠΉμˆ˜ν•˜κ²Œ μ‚¬μš©λ˜λŠ” λ¬Έμžλ“€μ΄ μ‘΄μž¬ν•œλ‹€.

    '[]' λŠ” 내뢀에 μ§€μ •λœ λ¬Έμžμ—΄μ˜ λ²”μœ„ μ€‘μ—μ„œ ν•œ λ¬Έμžλ§Œμ„ μ„ νƒν•˜λ‹€λŠ” νŠΉμˆ˜ν•œ 의미λ₯Ό κ°€μ§„λ‹€.

    그리고 κ·Έ λ‚΄λΆ€μ—μ„œ Meta 문자λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‹€λ₯Έ 의미λ₯Ό κ°€μ§€κ³  λ™μž‘ν•  수 μžˆμœΌλ―€λ‘œ 잘 ν™•μΈν•˜κ³  μ‚¬μš©ν•΄μ•Ό ν•œλ‹€.

    μ’€ 더 νŠΉλ³„ν•œ μš©λ„λ‘œ μ‚¬μš©λ˜λŠ” 것듀은 μ•„λž˜μ˜ ν‘œμ™€ κ°™λ‹€. 

     

     ν‘œν˜„식
    의미 
    [xy]
    문자 선택. x와 y λ‘˜ 쀑 ν•˜λ‚˜μ˜ 문자
     [^xy]
    not. x, yλ₯Ό μ œμ™Έν•œ 문자
     [x-z]
    rangeλ₯Ό λ‚˜νƒ€λ‚΄λ©° x ~ z μ‚¬μ΄μ˜ 문자
     \^
    escapeλ₯Ό λ‚˜νƒ€λ‚΄λ©° ^ λ₯Ό 문자둜 μ‚¬μš©ν•¨
     \b
    word boundaryλ₯Ό λ‚˜νƒ€λ‚΄λ©° λ¬Έμžμ™€ 곡백 μ‚¬μ΄μ˜ 문자
     \B
    non word boundaryλ₯Ό λ‚˜νƒ€λ‚΄λ©° λ¬Έμžμ™€ 곡백 사이가 μ•„λ‹Œ 문자
     \d
    digit, 숫자
     \D
    non digit, μˆ«μžκ°€ μ•„λ‹Œ 것
     \s
    space, 곡백 문자
     \S
    non space, 곡백 λ¬Έμžκ°€ μ•„λ‹Œ 것
     \t
    tab, νƒ­ 문자
     \v
    vertical tab, 수직 νƒ­ 문자
     \w
    word, μ•ŒνŒŒλ²³ + 숫자 + _ μ€‘μ˜ ν•œ 문자
     \W
    non word, μ•ŒνŒŒλ²³ + 숫자 + _ κ°€ μ•„λ‹Œ 문자


    μ •κ·œ ν‘œν˜„μ‹μ—μ„œ Flagλ₯Ό μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λ¬Έμžμ—΄μ— λŒ€ν•΄μ„œ 검색을 ν•œλ²ˆλ§Œ μ²˜λ¦¬ν•˜κ³  μ’…λ£Œν•˜κ²Œ λœλ‹€. FlagλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

     Flag
    의미 
     g
    Global, λŒ€μƒ λ¬Έμžμ—΄λ‚΄μ— λͺ¨λ“  νŒ¨ν„΄λ“€μ„ 검색. 
     i
    Ignore case, λŒ€μƒ λ¬Έμžμ—΄μ— λŒ€ν•΄μ„œ λŒ€/μ†Œλ¬Έμžλ₯Ό μ‹λ³„ν•˜μ§€ μ•ŠλŠ” 것
     m
    Multi line, λŒ€μƒ λ¬Έμžμ—΄μ΄ 닀쀑 라인의 λ¬Έμžμ—΄μΈ κ²½μš°μ—λ„ κ²€μƒ‰ν•˜λŠ” 것

     

     

    μ •κ·œμ‹ μ‚¬μš© 예제

    ν‘œν˜„μ‹
     
    의미 
    [γ„±-γ…Ž|ㅏ-γ…£|κ°€-힣]
    ν•œκΈ€
    [0-9]
    0 - 9 μ‚¬μ΄μ˜ 숫자 μ§‘ν•©
    [a-z] a - z μ‚¬μ΄μ˜ 문자 μ§‘ν•©
    [A-Z]
    A - Z μ‚¬μ΄μ˜ 문자 μ§‘ν•©
    (?=.*[a-zA-Z])
    μ˜μ†Œλ¬Έμž, μ˜λŒ€λ¬Έμž 포함
    (?=.*[a-z]) 
    μ΅œμ†Œ 1개의 μ˜μ†Œλ¬Έμž
    (?=.*[A-Z])
    μ΅œμ†Œ 1개의 μ˜λŒ€λ¬Έμž
    [a-z]{5,15}
    5 ~ 15자의 μ˜μ†Œλ¬Έμž
    (?=.*[a-z])(?=.*\d)(?=.*[-_])[a-z\d-_]{5,20}
    영문 μ†Œλ¬Έμž, 숫자, 특수 기호 (-, _)의 5 ~ 20자둜 이루어진 λ¬Έμžμ—΄
    (?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%])[a-zA-Z\d!@#$%]{8,16}
    영문 λŒ€/μ†Œλ¬Έμž, 특수문자 (!@#$%)의 8 ~ 16자둜 이루어진 λ¬Έμžμ—΄

     

    Swiftμ—μ„œ μ •κ·œμ‹ μ‚¬μš©ν•˜κΈ°

    struct Regex {
        /// 아이디 검증 μ •κ·œμ‹. 영문 μ†Œλ¬Έμž, 숫자, 특수기호 (_, -)의 5 ~ 20자둜 이루어짐
        static let id = #"(?=.*[a-z])(?=.*\d)(?=.*[-_])[a-z\d-_]{5,20}"#
    }
    
    func isIdValid(id: String) -> Bool {
        if let _ = id.range(of: Regex.id, options: [.regularExpression]) {
            return true // μ •κ·œμ‹ μœ νš¨μ„± 검증 톡과
        }
        return false // μ •κ·œμ‹ μœ νš¨μ„± 검증 μ‹€νŒ¨
    }

     

    μ •κ·œμ‹ ν…ŒμŠ€νŠΈ μ‚¬μ΄νŠΈ

    https://regexr.com/

     

     

    좜처

    https://ccambo.blogspot.com/2014/10/regular-expression.html

    https://blog.hexabrain.net/205

    λŒ“κΈ€

Designed by Tistory.