캡처 그룹
매칭 결과에서 부분 문자열을 추출합니다.
캡처 그룹은(는) CoddyKit의 무료 Swift Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Swift Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
캡처 그룹
정규식의 괄호는 캡처 그룹을 만듭니다. 각 그룹은 자신이 일치한 부분 문자열을 기억하므로, 더 큰 일치 결과에서 구조화된 부분을 추출할 수 있습니다.
단일 캡처
pattern의 일부를 ()로 감싸면 해당 부분이 캡처됩니다. 일치 결과는 튜플이 되며, 먼저 전체 일치 결과가 나오고 그다음에 각 캡처가 나옵니다.
if let m = "v2".firstMatch(of: /v(\d+)/) {
print("Whole: \(m.0)")
print("Group: \(m.1)")
}여러 캡처
괄호를 한 쌍 추가할 때마다 왼쪽에서 오른쪽 순서로 출력 튜플에 요소가 하나 더 추가됩니다.
if let m = "2024-05-30".wholeMatch(of: /(\d{4})-(\d{2})-(\d{2})/) {
print("Year: \(m.1)")
print("Month: \(m.2)")
print("Day: \(m.3)")
}전체 일치는 .0
출력의 .0 요소는 항상 일치한 전체 텍스트입니다. 캡처는 .1부터 시작합니다.
if let m = "key=value".wholeMatch(of: /(\w+)=(\w+)/) {
print("Full: \(m.0)")
print("Key: \(m.1), Value: \(m.2)")
}캡처는 부분 문자열입니다
기본적으로 캡처는 원래 문자열 내부를 가리키는 Substring 값입니다. 보관해야 한다면 String(...)으로 변환합니다.
if let m = "abc123".firstMatch(of: /([a-z]+)(\d+)/) {
let letters = String(m.1)
let numbers = String(m.2)
print(letters, numbers)
}선택적 캡처
그룹 뒤에 ?가 있어 선택 사항인 경우, 일치에 참여하지 않으면 해당 캡처가 nil일 수 있습니다.
if let m = "color".wholeMatch(of: /colou?(r)/) {
print("Captured: \(m.1)")
}이름이 지정된 캡처
(?<name>...)을 사용해 그룹에 이름을 지정하고 이름이 지정된 출력으로 읽을 수 있습니다. 숫자 인덱스보다 이해하기 쉽습니다.
let re = /(?<area>\d{3})-(?<line>\d{4})/
if let m = "555-1234".wholeMatch(of: re) {
print("Area: \(m.area)")
print("Line: \(m.line)")
}캡처 순회하기
캡처와 matches(of:)를 결합하면 여러 일치 결과에서 구조화된 데이터를 한 번에 추출할 수 있습니다.
let log = "a=1 b=2 c=3"
for m in log.matches(of: /(\w+)=(\d+)/) {
print("\(m.1) -> \(m.2)")
}중첩 그룹
그룹은 중첩될 수 있습니다. 바깥 그룹은 전체를 캡처하고 안쪽 그룹은 일부를 캡처합니다. 번호는 여는 괄호가 나타나는 순서를 따릅니다.
if let m = "12:30".wholeMatch(of: /((\d+):(\d+))/) {
print("All: \(m.1)")
print("H: \(m.2), M: \(m.3)")
}비캡처 그룹
캡처하지 않고 그룹화하려면 (?:...)를 사용합니다. 수량자에 사용할 그룹화만 필요하고 튜플 요소를 추가하고 싶지 않을 때 유용합니다.
if let m = "abab".wholeMatch(of: /(?:ab)+/) {
print("Matched: \(m.0)")
}구문 분석기 만들기
캡처를 사용하면 원시 텍스트를 형식이 지정된 값으로 바꿀 수 있습니다. 여기서는 좌표 문자열을 정수로 구문 분석합니다.
func parsePoint(_ s: String) -> (Int, Int)? {
guard let m = s.wholeMatch(of: /(\d+),(\d+)/),
let x = Int(m.1), let y = Int(m.2) else { return nil }
return (x, y)
}
print(parsePoint("3,7") ?? "nil")빠른 확인
/(\d{4})-(\d{2})/ pattern이 "2024-05"와 일치할 때 m.2는 무엇입니까?
복습
괄호는 캡처 그룹을 만들며, 이 그룹은 .0이 전체 일치 결과이고 .1, .2...가 캡처인 튜플로 접근할 수 있습니다. 이름이 지정된 그룹, 선택적 그룹, 중첩 그룹, 비캡처 그룹을 살펴보았습니다. 다음에는 RegexBuilder를 사용해 읽기 쉬운 스위프트 코드로 정규식을 만듭니다.
자주 묻는 질문
“캡처 그룹” 강의는 무료인가요?
네 — “캡처 그룹” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Swift Academy 강의 전체를 잠금 해제할 수 있습니다. Swift Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“캡처 그룹”에서 뭘 배우나요?
매칭 결과에서 부분 문자열을 추출합니다. 브라우저에서 직접 실행하는 실습 코드로 Swift Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Swift Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Swift Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“캡처 그룹” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Swift Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Swift Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.