정규식 입문: 실용적인 생존 가이드
· 8 분 소요
정규식은 누군가 키보드를 마구 두드린 것처럼 보입니다. 하지만 구문을 익히면 개발자 도구 상자에서 가장 유용한 도구 중 하나가 됩니다.
이 글은 실제 예제로 입문시켜드립니다. 군더더기 없이.
문자: 기본 벽돌
정규식은 “무언가와 일치”하는 지시문입니다:
a— 문자 a\d— 모든 숫자([0-9]와 동일)\w— 모든 문자, 숫자 또는 밑줄\s— 모든 공백 문자(스페이스, 탭, 줄바꿈).— 줄바꿈을 제외한 모든 문자
이를 조합하면 \d\d\d 같은 “세 자리 숫자” 패턴이 됩니다.
수량자: 하나만으론 부족
*— 0회 이상+— 1회 이상?— 0회 또는 1회{n}— 정확히 n회{n,m}— n회 이상 m회 이하
예를 들어 \d{3}-\d{4}는 555-1234 같은 전화번호에 일치합니다.
앵커: 패턴을 위치에 고정
^— 문자열 시작$— 문자열 끝\b— 단어 경계
^Error:는 “Error:“로 시작하는 줄에 일치 — 로그에서 오류를 잡을 때 아주 유용합니다.
실전 예제
이메일 검증(충분한 버전)
^[\w.+-]+@[\w-]+\.[\w.-]+$
완벽하지는 않지만 99%의 오타를 잡습니다.
URL에서 도메인 추출
https?://([^/]+)
캡처 그룹 ([^/]+)가 도메인을 잡습니다.
연속 공백을 하나로 정규화
\s+
단일 공백으로 교체합니다.
ISO 날짜 검증
^\d{4}-\d{2}-\d{2}$
형식만 검증(2026-13-99도 통과).
플래그: 스위치
g— 전역i— 대소문자 무시m— 여러 줄s— 점이 줄바꿈에도 일치
/error/gi는 대소문자 구분 없이 모든 “error”를 찾습니다.
흔한 함정
- 탐욕 vs 게으름 —
*는 기본적으로 탐욕.<.*>은 줄 전체를 먹어치웁니다.<.*?>을 쓰면 하나씩 일치. - 이스케이프 —
.,(,[은\.,\(,\[로. - HTML 파싱에 정규식 금지 — 전용 파서를 사용하세요.
연습장
정규식을 배우는 가장 좋은 방법은 자신의 코드에서 사용하는 것입니다. 로그 한 줄 파싱부터 시작하세요. 다음 프로젝트에서는 복잡한 패턴을 자연스럽게 쓰게 됩니다.
온라인으로 연습하고 싶다면 정규식 테스터를 사용해보세요 — 실시간 하이라이트와 캡처 그룹 시각화가 포함되어 있습니다.