-
[κΈ°ν] μ κ· ννμ (Regex)Swift 2022. 3. 31. 14:46
μ κ· ννμμ νΉμ ν κ·μΉμ κ°λ λ¬Έμμ΄μ νννκ±°λ κ²μν λ, κ·Έλ¦¬κ³ νΉμ λ¬Έμμ΄μ λν κ²μ¦μ΄ νμν λ μ£Όλ‘ μ¬μ©νλ€.
μλ₯Ό λ€μ΄ ν μ€νΈ μλν°μμ λ¬Έμμ΄μ κ²μνμ¬ μΉννκ±°λ μμ΄λ/λΉλ°λ²νΈμ μ ν¨μ±μ κ²μ¦ν λ μ¬μ©νλ€.
μ κ· ννμμμ μ¬μ©λλ κΈ°νΈλ₯Ό Meta λ¬ΈμλΌκ³ νλλ°, ννμμμ λ΄λΆμ μΌλ‘ νΉμ μλ―Έλ₯Ό κ°λ λ¬Έμλ₯Ό λ§νλ©° μ 리νλ©΄ λ€μκ³Ό κ°λ€.
ννμμλ―Έ^xλ¬Έμμ΄μ μμμ λνλ΄λ©° x λ¬Έμλ‘ μμλ¨ x$λ¬Έμμ΄μ μ’ λ£λ₯Ό λνλ΄λ©° x λ¬Έμλ‘ μ’ λ£λ¨ .xμμμ ν λ¬Έμμ μ리μλ₯Ό λνλ΄λ©° λ¬Έμμ΄μ΄ x λ¬Έμλ‘ λλ¨ x+λ°λ³΅μ λνλ΄λ©° x λ¬Έμκ° 1λ² μ΄μ λ°λ³΅λ¨ x?μ‘΄μ¬ μ¬λΆλ₯Ό λνλ΄λ©° x λ¬Έμκ° μ‘΄μ¬ν μλ, μ‘΄μ¬νμ§ μμ μλ μμ x*λ°λ³΅ μ¬λΆλ₯Ό λνλ΄λ©° x λ¬Έμκ° 0λ² μ΄μ λ°λ³΅λ¨ x|yorλ₯Ό λνλ΄λ©° 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λ₯Ό λνλ΄λ©° ^ λ₯Ό λ¬Έμλ‘ μ¬μ©ν¨ \bword boundaryλ₯Ό λνλ΄λ©° λ¬Έμμ 곡백 μ¬μ΄μ λ¬Έμ \Bnon word boundaryλ₯Ό λνλ΄λ©° λ¬Έμμ 곡백 μ¬μ΄κ° μλ λ¬Έμ \ddigit, μ«μ \Dnon digit, μ«μκ° μλ κ² \sspace, 곡백 λ¬Έμ \Snon space, 곡백 λ¬Έμκ° μλ κ² \ttab, ν λ¬Έμ \vvertical tab, μμ§ ν λ¬Έμ \wword, μνλ²³ + μ«μ + _ μ€μ ν λ¬Έμ \Wnon word, μνλ²³ + μ«μ + _ κ° μλ λ¬Έμ
μ κ· ννμμμ Flagλ₯Ό μ¬μ©νμ§ μμΌλ©΄ λ¬Έμμ΄μ λν΄μ κ²μμ νλ²λ§ μ²λ¦¬νκ³ μ’ λ£νκ² λλ€. Flagλ λ€μκ³Ό κ°λ€.Flagμλ―ΈgGlobal, λμ λ¬Έμμ΄λ΄μ λͺ¨λ ν¨ν΄λ€μ κ²μ. iIgnore case, λμ λ¬Έμμ΄μ λν΄μ λ/μλ¬Έμλ₯Ό μλ³νμ§ μλ κ² mMulti 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://ccambo.blogspot.com/2014/10/regular-expression.html
'Swift' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ