정규식 기초 문법 완벽 정리 - 처음 배우는 사람을 위한 메타문자와 패턴 작성법
이메일, 전화번호, 비밀번호 검증까지 한 번에 끝내는 정규식 기초 문법 가이드입니다. 메타문자 의미부터 실전 패턴 작성까지 예제 중심으로 차근차근 설명합니다.
![]()
로그 파일에서 특정 형식의 IP만 골라내거나, 회원가입 폼에서 이메일이 제대로 입력됐는지 확인해야 할 때가 있습니다. 이때 if문을 수십 개 늘어놓는 대신 한 줄로 처리하는 방법이 바로 정규식입니다. 그런데 막상 들여다보면 ^[a-z]+\d{2,4}$ 같은 암호 같은 기호들 때문에 시작도 전에 포기하는 분이 많습니다.
사실 정규식은 외울 게 그렇게 많지 않습니다. 핵심 기호 10여 개의 의미만 정확히 이해하면 나머지는 조합일 뿐입니다. 이 글에서는 그 핵심부터 실전 패턴까지 순서대로 정리합니다.
정규식이 도대체 뭔가요
정규식(Regular Expression, 줄여서 regex)은 문자열에서 특정 패턴을 찾아내는 규칙을 표현하는 언어입니다. 1950년대 수학자 스티븐 클레이니가 정립한 이론에서 출발했고, 지금은 거의 모든 프로그래밍 언어와 텍스트 에디터, 검색 도구에 내장돼 있습니다.
예를 들어 "숫자로만 이루어진 글자"를 찾고 싶다면 \d+ 라고 쓰면 됩니다. "010으로 시작하는 11자리 숫자"를 찾고 싶다면 010\d{8} 이라고 쓰면 됩니다. 이렇게 패턴을 정의해두면 검증, 검색, 치환을 한 번에 처리할 수 있습니다.
정규식의 본질은 "이런 모양의 글자를 찾아라"는 명령입니다. 글자 하나하나를 비교하는 게 아니라, 모양의 규칙을 묘사한다는 점이 핵심입니다.
어디에 쓰이나요
- 입력값 검증: 이메일, 전화번호, 비밀번호 형식 확인
- 데이터 추출: 로그에서 날짜나 에러 코드만 뽑아내기
- 일괄 치환: 에디터에서 특정 패턴을 한 번에 바꾸기
꼭 알아야 할 메타문자 정리
정규식에서 특별한 의미를 가진 기호를 메타문자라고 합니다. 일반 글자처럼 보이지만 실제로는 "규칙"을 나타냅니다. 가장 자주 쓰이는 것부터 보겠습니다.
| 기호 | 의미 | 예시 |
|---|---|---|
. | 아무 문자 1개 | a.c → abc, axc |
\d | 숫자 1개 (0-9) | \d\d → 42 |
\w | 단어 문자 (영문, 숫자, _) | \w+ → hello_1 |
\s | 공백 문자 | 띄어쓰기, 탭 |
[] | 괄호 안 문자 중 1개 | [abc] → a 또는 b |
| | 또는 (OR) | cat|dog |
\ | 다음 문자를 일반 문자로 | \. → 진짜 점 |
여기서 헷갈리기 쉬운 부분이 점(.)입니다. 정규식에서 점은 "아무 문자나 하나"를 뜻하기 때문에, 진짜 마침표를 찾고 싶다면 앞에 역슬래시를 붙여 \. 으로 써야 합니다. 이렇게 메타문자의 특수 기능을 없애는 것을 이스케이프라고 합니다.
\d가 숫자라면 \D는 숫자가 아닌 것, \w가 단어 문자라면 \W는 단어 문자가 아닌 것을 뜻합니다.수량자와 문자 클래스 다루기
메타문자가 "어떤 종류"를 정한다면, 수량자는 "몇 개"를 정합니다. 둘을 조합하면 표현력이 크게 늘어납니다.
수량자 종류
*: 0개 이상 (있어도 되고 없어도 됨)+: 1개 이상 (최소 1개는 있어야 함)?: 0개 또는 1개 (선택적){n}: 정확히 n개{n,m}: n개 이상 m개 이하
예를 들어 \d{2,4}는 숫자 2개에서 4개까지를 의미합니다. 연도(4자리)나 월(2자리)을 한 패턴으로 처리할 때 유용합니다. colou?r처럼 쓰면 color와 colour를 둘 다 잡을 수 있습니다.
문자 클래스 범위 지정
대괄호 안에서는 하이픈으로 범위를 지정할 수 있습니다. [a-z]는 소문자 전체, [0-9]는 숫자 전체, [가-힣]은 한글 음절 전체를 의미합니다. 대괄호 맨 앞에 ^를 넣으면 "이것들을 제외한"이 됩니다. [^0-9]는 숫자가 아닌 모든 문자입니다.
앵커와 그룹으로 정밀하게 맞추기
패턴이 문자열의 어디에 위치해야 하는지를 지정하는 것이 앵커입니다.
^: 문자열의 시작$: 문자열의 끝\b: 단어 경계
^\d+$라고 쓰면 "처음부터 끝까지 숫자로만 이루어진 문자열"을 뜻합니다. 앵커를 빼고 \d+만 쓰면 "abc123" 같은 문자열도 통과하기 때문에, 전체 형식을 검증할 때는 시작과 끝 앵커를 반드시 붙이는 습관이 중요합니다.
소괄호 ()는 그룹을 만듭니다. 여러 문자를 묶어 하나의 단위로 다루거나, 매칭된 부분을 따로 추출할 때 씁니다. 예를 들어 날짜에서 (\d{4})-(\d{2})-(\d{2}) 패턴을 쓰면 연, 월, 일을 각각 분리해 가져올 수 있습니다.
실전에서 바로 쓰는 패턴 모음
이론을 봤으니 자주 쓰는 검증 패턴을 정리합니다. 그대로 복사해 활용해도 됩니다.
| 용도 | 패턴 |
|---|---|
| 휴대폰 번호 | ^01[016789]\d{7,8}$ |
| 이메일 (간단) | ^[\w.-]+@[\w.-]+\.\w{2,}$ |
| 숫자만 | ^\d+$ |
| 한글만 | ^[가-힣]+$ |
| 천 단위 콤마 찾기 | \B(?=(\d{3})+(?!\d)) |
마지막 패턴은 숫자에 천 단위 콤마를 넣을 때 자주 등장합니다. 급여나 연봉처럼 큰 숫자를 화면에 표시할 때 3000000을 3,000,000으로 바꾸는 식입니다. 실제로 이런 숫자 포맷팅이 어떻게 적용되는지는 연봉 실수령액 계산기 같은 도구에서 입력값을 자동으로 콤마 단위로 정리해주는 화면을 보면 직관적으로 이해됩니다.
정규식을 안전하게 쓰는 요령
정규식은 강력하지만 잘못 쓰면 성능 문제나 버그를 일으킵니다. 처음 배울 때부터 다음 습관을 들여두면 좋습니다.
- 테스트 도구를 쓰세요: regex101 같은 사이트에서 패턴이 어떻게 매칭되는지 시각적으로 확인하면 실수가 크게 줄어듭니다.
- 욕심내지 마세요:
.*를 남발하면 의도치 않은 부분까지 잡힙니다. 가능한 한 구체적인 문자 클래스를 쓰는 게 안전합니다. - 주석을 남기세요: 복잡한 패턴은 한 달 뒤 본인도 못 알아봅니다. 어떤 형식을 잡는 패턴인지 코드 옆에 적어두세요.
특히 사용자 입력을 받는 정규식에서 (a+)+ 같은 중첩 수량자는 입력에 따라 처리 시간이 폭발적으로 늘어나는 경우가 있으니 주의해야 합니다. 이를 카타스트로픽 백트래킹이라고 부릅니다.
정규식은 한 번에 다 외우는 게 아니라, 필요할 때마다 찾아 쓰면서 익숙해지는 도구입니다. 오늘 본 메타문자 표를 북마크해두고, 작은 검증 패턴부터 직접 짜보세요. 막힐 때는 regex101에 패턴을 붙여넣고 어느 부분에서 매칭이 끊기는지 확인하면 가장 빠르게 배울 수 있습니다.