정규표현식(Regex) 완벽 가이드 - 기초부터 실전 패턴까지 2026
정규표현식, 매번 구글링하지 말고 이번에 제대로 익혀두세요. 메타문자부터 실전 패턴 10개까지 예제로 정리했어요.
정규표현식이요? 개발자의 영원한 숙제죠. 저도 매번 이메일 검증 패턴 짤 때마다 스택오버플로우 가서 복붙했어요. 근데 기본 원리를 한번 제대로 잡고 나니까 웬만한 패턴은 그냥 써지더라고요. ^, $, \d, + 이 네 가지만 알면 절반은 해결이에요.
정규표현식이란?
정규표현식은 검색 패턴을 정의하는 문자열입니다. 1950년대 수학자 Stephen Kleene가 개발한 이후, 거의 모든 프로그래밍 언어에서 표준 기능이 되었습니다. 패턴 매칭에 특화된 일종의 미니 프로그래밍 언어라고 생각하면 됩니다.
- 패턴 매칭: 특정 구조를 따르는 텍스트 찾기
- 유효성 검사: 입력이 예상 형식(이메일, 전화번호, 날짜)에 맞는지 확인
- 데이터 추출: 큰 텍스트에서 특정 데이터 뽑아내기
- 치환: 패턴을 찾아 텍스트 변환하기
- 분할: 패턴 기반 구분자로 텍스트 나누기
지금 이 도구를 사용해 보세요:
정규식 테스터 사용하기 →기본 문법
정규식 문법은 처음엔 복잡해 보이지만, 단순한 기본 요소들로 구성되어 있습니다:
메타문자
- . (점) — 줄바꿈을 제외한 모든 단일 문자에 매칭
- \d — 모든 숫자(0-9)에 매칭, [0-9]와 동일
- \w — 모든 단어 문자(영문, 숫자, 밑줄)에 매칭
- \s — 모든 공백 문자(스페이스, 탭, 줄바꿈)에 매칭
- \b — 단어 경계 — 단어와 비단어 문자 사이 위치에 매칭
- ^ — 문자열(또는 멀티라인 모드에서 줄) 시작에 매칭
- $ — 문자열(또는 멀티라인 모드에서 줄) 끝에 매칭
수량자
- * — 0회 이상: a*는 '', 'a', 'aaa'에 매칭
- + — 1회 이상: a+는 'a', 'aaa'에 매칭하지만 ''에는 매칭 안 됨
- ? — 0 또는 1회: colou?r은 'color'와 'colour' 모두에 매칭
- {n} — 정확히 n회: \d{4}는 정확히 4자리 숫자에 매칭
- {n,m} — n~m회: \d{2,4}는 2~4자리 숫자에 매칭
- {n,} — n회 이상: \d{3,}는 3자리 이상 숫자에 매칭
그룹과 교대
- (abc) — 캡처 그룹: 매칭된 텍스트를 나중에 사용할 수 있도록 캡처
- (?:abc) — 비캡처 그룹: 캡처하지 않고 그룹화만
- (?<name>abc) — 명명된 캡처 그룹: 라벨을 붙여 캡처
- a|b — 교대: 'a' 또는 'b'에 매칭
- (?=abc) — 긍정 전방탐색: 뒤에 'abc'가 따라오면 매칭
- (?<=abc) — 긍정 후방탐색: 앞에 'abc'가 있으면 매칭
실전 정규식 패턴 10가지
모든 개발자가 알아야 할 정규식 패턴 10가지와 동작 원리입니다:
- 이메일: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ — 표준 이메일 주소 매칭
- URL: https?:\/\/(www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_+.~#?&//=]*) — HTTP/HTTPS URL 매칭
- 전화번호(국제): (\+?\d{1,3}[-.\s]?)?\(?\d{2,4}\)?[-.\s]?\d{3,4}[-.\s]?\d{3,4} — 국제 전화번호 형식 매칭
- IPv4 주소: \b(?:\d{1,3}\.){3}\d{1,3}\b — 192.168.1.1 같은 IP 주소 매칭
- 날짜(YYYY-MM-DD): \d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01]) — ISO 날짜 형식 매칭
- 강력한 비밀번호: ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$ — 대소문자, 숫자, 특수문자 필수
- HEX 색상: ^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$ — #RRGGBB 또는 #RGB 형식 매칭
- HTML 태그: <([a-z]+)([^<]+)*(?:>(.*?)<\/\1>|\s+\/>) — HTML 여닫는 태그 매칭
- 공백 제거: ^\s+|\s+$ — 앞뒤 공백 매칭
- 한글 문자: [가-힣]+ — 한글 문자 1개 이상 매칭
실무 활용 사례
정규식은 실무에서 빛을 발합니다. 개발자가 매일 만나는 주요 활용 사례입니다:
- 폼 유효성 검사: 제출 전 이메일, 전화번호, 비밀번호 강도 검증
- 로그 파싱: 로그 파일에서 타임스탬프, 에러 코드, IP 주소 추출
- 데이터 정제: 불필요한 문자 제거, 공백 정규화, HTML 태그 제거
- URL 라우팅: 웹 프레임워크에서 URL 경로의 파라미터 매칭 및 추출
- 코드 리팩토링: 대규모 코드베이스에서 패턴 찾기 및 치환
- 웹 스크래핑: HTML 콘텐츠에서 구조화된 데이터 추출
정규식 테스터 도구 비교
여러 온라인 도구로 정규식 패턴을 테스트할 수 있습니다. QuickFigure의 정규식 테스터는 간결함과 프라이버시가 장점입니다. 모든 처리가 브라우저에서 이루어지며 서버로 데이터가 전송되지 않습니다. 서버 측 처리가 필요한 regex101과 달리 QuickFigure는 로딩 후 완전히 오프라인으로 동작합니다.
지금 이 도구를 사용해 보세요:
정규식 테스트하기 →자주 묻는 질문
정규식에서 *와 +의 차이는?
*는 0회 이상(선행 요소가 선택적), +는 1회 이상(최소 1번 필수)을 매칭합니다. 예: ab*c는 'ac', 'abc', 'abbc'에 매칭하지만, ab+c는 'abc', 'abbc'만 매칭하고 'ac'에는 매칭하지 않습니다.
대소문자 구분 없이 매칭하려면?
정규식에 'i' 플래그를 추가하세요. JavaScript: /pattern/i 또는 new RegExp('pattern', 'i'). 이렇게 하면 대문자와 소문자 모두에 매칭됩니다.
캡처 그룹은 어디에 사용하나요?
캡처 그룹(괄호)을 사용하면 매치의 특정 부분을 추출할 수 있습니다. 예: (\d{4})-(\d{2})-(\d{2}) 패턴으로 '2026-03-28'을 매칭하면 '2026', '03', '28'이 각각 별도 그룹으로 캡처됩니다.
정규식은 모든 프로그래밍 언어에서 같은가요?
핵심 문법은 비슷하지만 각 언어마다 고유한 정규식 엔진이 있어 고급 기능 지원이 다릅니다. JavaScript, Python, Java, Go 모두 PCRE 스타일 정규식을 지원하지만 후방탐색, 유니코드 지원 등에서 차이가 있습니다.
재앙적 역추적(catastrophic backtracking)을 어떻게 피하나요?
중첩된 수량자가 지수적 시간 복잡도를 유발할 때 발생합니다. (a+)+나 (a|aa)+ 같은 패턴을 피하세요. 가능하면 원자 그룹 (?>)이나 소유적 수량자 a++를 사용하고, .*보다 구체적인 문자 클래스를 선호하세요.
▶이 글에서 다룬 도구 바로 사용하기
민재
개발자 겸 테크 라이터. 개발 도구와 파일 변환 기술을 깊이 있게 다룹니다.
이 글이 도움이 되셨나요? 새 가이드 알림 받기
스팸 없이, 새 소식만 보내드립니다. 언제든 취소 가능. · 구독 시 개인정보처리방침에 동의합니다.