정규식 기초 문법 완벽 정리 - 패턴 매칭 핵심 개념부터 실전 예제까지
정규식 기초 문법을 처음 배우는 분을 위해 메타문자, 수량자, 그룹핑까지 실무에서 바로 쓸 수 있는 패턴을 표와 예제로 정리했습니다.
![]()
텍스트에서 이메일 주소만 뽑아내고 싶은데 하나하나 찾자니 막막했던 경험, 한 번쯤 있으실 겁니다. 로그 파일에서 특정 에러 코드를 검색하거나, 사용자 입력값이 올바른 형식인지 검증할 때도 마찬가지입니다. 이런 상황에서 정규식 기초 문법만 알아도 수십 줄의 코드를 단 한 줄로 줄일 수 있습니다.
정규식이란 무엇인가
정규식(Regular Expression, 줄여서 regex)은 문자열에서 특정 패턴을 찾기 위한 표현 언어입니다. 1956년 수학자 스티븐 클레이니가 정규 언어 이론에서 처음 제안했고, 현재는 거의 모든 프로그래밍 언어와 텍스트 에디터에서 지원합니다.
예를 들어 \d{3}-\d{4}-\d{4}라는 정규식은 010-1234-5678 같은 전화번호 패턴을 의미합니다. 이 한 줄로 수천 개의 텍스트에서 전화번호만 정확히 골라낼 수 있습니다.
정규식은 외울 필요가 없습니다. 기본 원리를 이해하면 필요할 때 조합해서 쓸 수 있고, 자주 쓰는 패턴은 자연스럽게 익혀집니다. 핵심은 '문법을 외우는 것'이 아니라 '패턴을 읽는 눈'을 기르는 것입니다.
정규식이 활용되는 대표적인 분야는 다음과 같습니다.
- 입력값 검증 - 이메일, 전화번호, 우편번호 등 형식 확인
- 텍스트 검색과 치환 - 로그 분석, 데이터 정제, 일괄 수정
- 웹 크롤링 - HTML에서 특정 데이터 추출
- IDE/에디터 활용 - VS Code, Sublime Text 등에서 고급 찾기/바꾸기
정규식 기초 문법 - 핵심 메타문자
정규식 기초 문법에서 가장 먼저 알아야 할 것은 메타문자입니다. 메타문자는 특별한 의미를 가진 기호로, 일반 문자와 구분됩니다.
| 메타문자 | 의미 | 예시 | 매칭 결과 |
|---|---|---|---|
| . | 아무 문자 1개 (줄바꿈 제외) | a.c | abc, a1c, a-c |
| ^ | 문자열의 시작 | ^Hello | Hello로 시작하는 문자열 |
| $ | 문자열의 끝 | world$ | world로 끝나는 문자열 |
| \d | 숫자 (0-9) | \d\d | 12, 99, 07 |
| \w | 영문자, 숫자, 밑줄 | \w+ | hello, user_1 |
| \s | 공백 문자 (스페이스, 탭 등) | a\sb | a b |
| \b | 단어 경계 | \bcat\b | cat (concatenate의 cat은 제외) |
| \ | 이스케이프 (특수문자를 문자 그대로) | \. | 마침표 자체 |
대문자로 쓰면 반대 의미가 됩니다. \D는 숫자가 아닌 문자, \W는 영숫자가 아닌 문자, \S는 공백이 아닌 문자를 뜻합니다.
수량자로 반복 패턴 다루기
메타문자가 '무엇을' 찾을지 정한다면, 수량자는 '몇 개' 찾을지를 결정합니다. 정규식 기초 문법에서 수량자를 이해하면 표현력이 크게 올라갑니다.
| 수량자 | 의미 | 예시 | 매칭 결과 |
|---|---|---|---|
| * | 0회 이상 반복 | ab*c | ac, abc, abbc, abbbc |
| + | 1회 이상 반복 | ab+c | abc, abbc (ac는 불일치) |
| ? | 0회 또는 1회 | colou?r | color, colour |
| {n} | 정확히 n회 | \d{4} | 2026, 1234 |
| {n,m} | n회 이상 m회 이하 | \d{2,4} | 12, 123, 1234 |
| {n,} | n회 이상 | a{2,} | aa, aaa, aaaa... |
수량자를 조합하면 아주 실용적인 패턴을 만들 수 있습니다. 예를 들어 한국 휴대전화 번호는 01[016789]-\d{3,4}-\d{4}로 표현합니다. 이 패턴 하나로 010, 011, 016, 017, 018, 019로 시작하는 모든 번호를 잡아냅니다.
탐욕적 매칭 vs 게으른 매칭
수량자는 기본적으로 탐욕적(greedy)으로 동작합니다. 가능한 한 많은 문자를 매칭하려고 합니다.
- <.+>로 <b>굵게</b>를 찾으면 <b>굵게</b> 전체가 매칭됩니다
- <.+?>로 찾으면 <b>와 </b>가 각각 매칭됩니다
수량자 뒤에 ?를 붙이면 게으른(lazy) 매칭으로 전환되어, 가능한 한 적은 문자만 매칭합니다. HTML 태그를 다룰 때 특히 중요한 개념입니다.
그룹과 문자 클래스 활용
정규식의 진짜 힘은 그룹과 문자 클래스에서 나옵니다.
문자 클래스 [ ]
대괄호 안에 넣은 문자 중 하나와 매칭됩니다.
- [abc] - a, b, c 중 하나
- [a-z] - 소문자 a부터 z까지
- [0-9] - 숫자 0부터 9까지 (\d와 동일)
- [가-힣] - 한글 음절 전체
- [^abc] - a, b, c를 제외한 모든 문자 (^가 대괄호 안에서는 부정)
그룹핑 ( )
소괄호로 묶으면 하나의 단위로 취급됩니다. 캡처 그룹이라고도 하며, 매칭된 부분을 추출할 때 사용합니다.
예를 들어 날짜 패턴 (\d{4})-(\d{2})-(\d{2})에서 각 괄호가 연도, 월, 일을 각각 캡처합니다. 프로그래밍에서 이 값을 꺼내 쓸 수 있습니다.
OR 연산자 |
파이프 기호로 여러 패턴 중 하나를 선택합니다. (cat|dog|bird)는 cat, dog, bird 중 하나와 매칭됩니다. 서버 로그에서 (ERROR|WARN|FATAL)로 검색하면 세 종류의 로그를 한 번에 찾을 수 있습니다.
실전에서 바로 쓰는 정규식 패턴
이론을 알았으니 실전입니다. 아래는 업무에서 자주 쓰이는 정규식 패턴입니다. 그대로 복사해서 사용할 수 있습니다.
| 용도 | 정규식 패턴 | 설명 |
|---|---|---|
| 이메일 주소 | [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} | 기본적인 이메일 형식 검증 |
| 한국 휴대전화 | 01[016789]-?\d{3,4}-?\d{4} | 하이픈 유무 모두 매칭 |
| URL | https?://[\w.-]+(?:/[\w./?&=%#-]*)? | http, https 주소 매칭 |
| 한글만 | [가-힣]+ | 한글 텍스트 추출 |
| HTML 태그 제거 | <[^>]+> | 모든 HTML 태그 매칭 |
| 공백 정리 | \s{2,} | 연속된 공백 2개 이상 |
| IPv4 주소 | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} | IP 주소 형식 매칭 |
IPv4 주소 패턴을 활용하면 네트워크 관련 작업이 훨씬 수월해집니다. 참고로 현재 자신의 IP를 빠르게 확인해야 할 때는 내 IP 주소 확인 같은 웹 도구를 이용하면 접속만으로 바로 알 수 있습니다.
자주 하는 실수와 해결법
- 마침표를 이스케이프하지 않는 실수 - 파일 확장자를 찾을 때 .txt가 아니라 \.txt로 써야 합니다. 그냥 .txt는 atxt, 1txt도 매칭됩니다
- 탐욕적 매칭 무시 - .* 대신 .*?를 써야 할 때가 많습니다. 특히 HTML 파싱 시 주의하세요
- 앵커(^, $) 누락 - 전체 문자열 검증 시 ^패턴$으로 감싸야 부분 매칭을 방지합니다
정규식 연습과 테스트 방법
정규식은 직접 써보면서 익히는 것이 가장 빠릅니다. 패턴을 작성하고 결과를 바로 확인할 수 있는 도구들을 활용하세요.
온라인 테스트 도구
regex101.com은 정규식 학습에 가장 널리 쓰이는 도구입니다. 패턴을 입력하면 실시간으로 매칭 결과를 보여주고, 각 부분이 무엇을 의미하는지 한국어 포함 다국어로 설명해 줍니다. JavaScript, Python, PHP, Go 등 언어별 엔진을 선택할 수 있어 실제 코드에서의 동작을 미리 확인할 수 있습니다.
에디터에서 바로 연습하기
VS Code에서 Ctrl+H(찾기/바꾸기)를 열고 정규식 버튼(.*) 을 활성화하면 바로 정규식을 사용할 수 있습니다. 실제 코드 파일에서 연습하면 실무 감각이 빠르게 붙습니다.
프로그래밍 언어별 기본 사용법
대부분의 언어에서 정규식 문법은 거의 동일합니다. 사용하는 함수명만 다를 뿐입니다.
- JavaScript - /패턴/.test(문자열) 또는 문자열.match(/패턴/g)
- Python - import re 후 re.findall(r'패턴', 문자열)
- Java - Pattern.compile("패턴").matcher(문자열)
연습할 때 시간을 재면서 하면 집중력이 올라갑니다. 온라인 스톱워치를 켜놓고 5분 안에 패턴 완성하기 같은 미니 챌린지를 해보는 것도 좋은 방법입니다.
정규식 기초 문법은 여기까지입니다. 오늘 정리한 메타문자, 수량자, 그룹핑 세 가지만 확실히 이해하면 실무에서 만나는 텍스트 처리 문제의 80%는 해결할 수 있습니다. 지금 바로 regex101.com에 접속해서 자신의 이메일 주소를 매칭하는 패턴부터 만들어 보세요.