정규 표현식

moonazn·2025년 7월 20일

Swift

목록 보기
8/11

🍐 정규 표현식 (regular expression, Regex)

: 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 형식 언어

복잡한 문자열 검사(데이터 파싱), 유효성 검증(이메일, 전화번호 등)에 자주 사용된다.

  • 각 문자들은 특별한 의미의 문자(메타 문자)로 이해되거나 정규 문자 그 자체로 이해된다.

문법 정리

문법의미예시설명
.임의의 문자 하나a.c"abc", "acc" 등
^문자열 시작^abc"abc"로 시작
$문자열 끝abc$"abc"로 끝남
*0개 이상 반복a*"", "a", "aa"
+1개 이상 반복a+"a", "aa", ...
?0개 또는 1개a?"", "a"
[]문자 집합[abc]a, b, c 중 하나
[^]제외 문자 집합[^abc]a, b, c 제외
{n}n번 반복a{3}"aaa"
{n,}n번 이상a{2,}"aa", "aaa", ...
{n,m}n~m 반복a{2,4}"aa", "aaa", "aaaa"
``OR`a
()그룹(ab)+"ab", "abab", ...
\이스케이프\."." 자체를 의미

📱 Swift에서 정규 표현식 사용

✅ NSRegularExpression 방식

import Foundation

let pattern = "^[A-Z][a-z]+$"
let text = "Apple"

let regex = try! NSRegularExpression(pattern: pattern)
let range = NSRange(location: 0, length: text.utf16.count)

if regex.firstMatch(in: text, options: [], range: range) != nil {
    print("일치함!")
}

✅ Swift 5.7+ 리터럴 사용 (iOS 16+)

let email = "test@example.com"

if let _ = email.firstMatch(of: /[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i) {
    print("이메일 형식입니다.")
}

• 정규 표현식을 문자열이 아니라 리터럴(/.../)로 직접 입력할 수 있다.
• 끝의 i는 대소문자 무시(case-insensitive) 플래그를 의미한다.

✅ 패턴 추출

let input = "전화번호는 010-1234-5678입니다."
let pattern = #"(\d{3})-(\d{4})-(\d{4})"#

if let range = input.range(of: pattern, options: .regularExpression) {
    let phone = input[range]
    print("찾은 번호: \(phone)")
}
profile
개발 공뷰

0개의 댓글