이름 있는 그룹과 앵커
고급 정규식을 알아봅니다
이름 있는 그룹과 앵커은(는) CoddyKit의 무료 Ruby Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Ruby Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
이름이 지정된 그룹을 사용하는 이유
패턴이 커지면 m[1]과 같은 번호가 매겨진 캡처는 읽기 어려워집니다. 이름이 지정된 그룹을 사용하면 각 캡처에 의미 있는 이름을 붙일 수 있습니다.
구문: (?<name>pattern).
m = /(?<year>\d{4})-(?<month>\d{2})/.match('2026-05')
puts(m[:year])
puts(m[:month])이름이 지정된 캡처에 접근하기
기호 또는 문자열 키로 이름이 지정된 캡처에 접근할 수 있습니다: m[:name]. named_captures 메서드는 모든 캡처를 해시로 반환합니다.
m = /(?<user>\w+)@(?<host>\w+)/.match('alice@mail')
p m.named_captures=~와 함께 사용하는 이름이 지정된 그룹
이름이 지정된 그룹을 포함한 정규식 리터럴이 =~의 왼쪽에 오면 Ruby는 각 이름에 해당하는 지역 변수를 자동으로 만듭니다.
if /(?<word>\w+)/ =~ 'hello'
puts word
end앵커: 시작과 끝
앵커는 문자가 아니라 위치와 일치합니다:
^줄의 시작$줄의 끝
전체 입력이 일치하는지 검증할 때 매우 중요합니다.
puts(/^abc/.match?('abcdef'))
puts(/def$/.match?('abcdef'))
puts(/^abc$/.match?('abcdef'))문자열 앵커 \A와 \z
^와 $는 줄의 경계와 일치하므로 여러 줄 문자열에서 중요합니다. 전체 문자열에는 \A(시작)와 \z(가장 마지막)를 사용하는 편이 좋습니다.
text = "first\nsecond"
puts(/^second/.match?(text))
puts(/\Asecond/.match?(text))전체 입력 검증하기
문자열 전체가 특정 형식과 일치하는지 확인하려면 양쪽 끝에 앵커를 지정합니다. 이렇게 하면 여분의 문자가 있는 문자열을 거부할 수 있습니다.
zip = /\A\d{5}\z/
puts(zip.match?('34000'))
puts(zip.match?('34000x'))단어 경계
\b는 단어 경계입니다. 단어 문자와 단어 문자가 아닌 문자 사이의 위치를 의미합니다. 문자를 소비하지 않고 전체 단어와 일치합니다.
puts('cat catalog'.scan(/\bcat\b/).length)
puts('cat catalog'.scan(/cat/).length)전방 탐색
긍정적 전방 탐색 (?=...)은 다음에 올 내용을 match에 포함하지 않고 확인합니다. 부정적 전방 탐색은 (?!...)입니다.
puts('100 dollars'.match(/\d+(?= dollars)/)[0])
puts('apple pie'.match?(/apple(?! juice)/))후방 탐색
후방 탐색 (?<=...)은 match 앞에 있는 내용을 확인합니다. 부정적 후방 탐색은 (?<!...)입니다.
m = '$42'.match(/(?<=\$)\d+/)
puts(m[0])비캡처 그룹
OR이나 수량자를 위해 그룹화는 필요하지만 캡처는 원하지 않을 때가 있습니다. 이때 (?:...)을 사용하여 비캡처 그룹을 만듭니다.
m = /(?:Mr|Ms)\. (\w+)/.match('Ms. Lee')
p m.captures모두 결합하기
실제 검증기는 앵커, 이름이 지정된 그룹, 수량자를 함께 사용합니다.
re = /\A(?<area>\d{3})-(?<num>\d{4})\z/
m = re.match('555-1234')
puts(m[:area])
puts(m[:num])빠른 확인
줄 바꿈을 무시하면서 전체 문자열이 일치하도록 하려면 어떤 앵커를 사용해야 합니까?
복습: 이름이 지정된 그룹과 앵커
고급 정규식 도구를 익혔습니다:
- 이름이 지정된 그룹
(?<name>...)과named_captures - 앵커
^ $ \A \z \b - 전방 탐색
(?=)/(?!)과 후방 탐색(?<=)/(?<!) - 비캡처 그룹
(?:...)
puts(/\A(?<id>\d+)\z/.match('42')[:id])자주 묻는 질문
“이름 있는 그룹과 앵커” 강의는 무료인가요?
네 — “이름 있는 그룹과 앵커” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Ruby Academy 강의 전체를 잠금 해제할 수 있습니다. Ruby Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“이름 있는 그룹과 앵커”에서 뭘 배우나요?
고급 정규식을 알아봅니다 브라우저에서 직접 실행하는 실습 코드로 Ruby Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Ruby Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Ruby Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“이름 있는 그룹과 앵커” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Ruby Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Ruby Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.