: 특정한 규칙을 가진 문자열의 집합을 표현하는데 사용되는 형식 언어
복잡한 문자열 검사(데이터 파싱), 유효성 검증(이메일, 전화번호 등)에 자주 사용된다.
| 문법 | 의미 | 예시 | 설명 |
|---|---|---|---|
. | 임의의 문자 하나 | 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", ... |
\ | 이스케이프 | \. | "." 자체를 의미 |
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("일치함!")
}
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)")
}