← 블로그 목록

정규식 테스터 완벽 가이드 - 실시간 패턴 검사와 활용법 | HMApps

정규식(Regular Expression)을 실시간으로 테스트하고 검증하는 HMApps 정규식 테스터 사용법을 소개합니다. 이메일·전화번호·URL 검증부터 고급 패턴까지, 정규식 입문자도 쉽게 따라할 수 있는 실전 예제를 담았습니다.

광고

정규식이란? — 개발자의 스위스 아미 나이프

"이메일 주소만 추출해줘", "전화번호 형식이 맞는지 확인해줘", "로그 파일에서 오류 줄만 뽑아줘"— 개발 현장에서 하루에도 수십 번 마주치는 요구사항들입니다. 이럴 때마다 복잡한 조건문을 줄줄이 작성하는 대신, 단 한 줄의 정규식(Regular Expression, RegExp)으로 깔끔하게 해결할 수 있습니다.

정규식은 1950년대 수학자 스티븐 클린(Stephen Kleene)이 고안한 형식 언어 이론에서 출발했습니다. 오늘날에는 Python, JavaScript, Java, Go 등 거의 모든 프로그래밍 언어와 Vim, VS Code, grep, sed 같은 편집기·유틸리티에서 표준으로 지원됩니다. 한 번 익혀두면 언어를 바꿔도 쓸 수 있는 범용 스킬입니다.

하지만 정규식은 배우기 까다롭기로 유명합니다. ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$ 같은 패턴을 처음 보면 암호처럼 느껴지죠. 이럴 때 필요한 것이 바로 실시간 정규식 테스터입니다. HMApps의 정규식 테스터를 활용하면 패턴을 작성하면서 즉시 결과를 확인할 수 있어 학습 속도가 비약적으로 빨라집니다.

HMApps 정규식 테스터 기본 사용법

HMApps 정규식 테스터는 별도 설치 없이 브라우저에서 바로 사용할 수 있습니다. 크게 세 영역으로 구성되어 있습니다.

  • 패턴 입력창: 정규식 패턴을 입력합니다. 슬래시(/) 없이 순수 패턴만 입력하면 됩니다.
  • 플래그 선택: g(전역), i(대소문자 무시), m(다중 행), s(도트가 개행 포함) 등을 선택합니다.
  • 테스트 문자열: 패턴을 적용할 텍스트를 입력합니다. 매칭된 부분이 실시간으로 하이라이트됩니다.

입력하는 즉시 결과가 표시되므로 패턴을 한 글자씩 수정하면서 동작을 눈으로 확인할 수 있습니다. 이 즉각적인 피드백이 정규식 학습의 핵심입니다.

플래그(Flag) 이해하기

플래그는 정규식의 동작 방식을 제어하는 옵션입니다. 가장 자주 사용하는 플래그는 다음과 같습니다.

플래그의미예시
g전역 검색 (모든 매칭 반환)문서 내 모든 이메일 추출
i대소문자 구분 안 함hello로 Hello, HELLO 모두 매칭
m다중 행 모드 (^, $가 각 줄에 적용)여러 줄 텍스트에서 줄 시작/끝 검사
sdotAll 모드 (.이 개행문자 포함)여러 줄에 걸친 패턴 매칭

정규식 핵심 문법 — 30분 만에 읽기

정규식은 특수 문자(메타문자)와 일반 문자의 조합입니다. 자주 쓰이는 문법을 정리했습니다.

문자 클래스

  • . — 개행을 제외한 임의의 문자 1개
  • d — 숫자 [0-9]
  • D — 숫자가 아닌 문자
  • w — 단어 문자 [a-zA-Z0-9_]
  • W — 단어 문자가 아닌 것
  • s — 공백 문자(스페이스, 탭, 개행 등)
  • S — 공백이 아닌 문자
  • [abc] — a, b, c 중 하나
  • [^abc] — a, b, c를 제외한 문자
  • [a-z] — 소문자 알파벳 범위

수량자(Quantifier)

  • * — 0회 이상
  • + — 1회 이상
  • ? — 0회 또는 1회 (선택적)
  • {n} — 정확히 n회
  • {n,} — n회 이상
  • {n,m} — n회 이상 m회 이하
  • *?, +? — 게으른(lazy) 수량자, 가능한 짧게 매칭

앵커와 경계

  • ^ — 문자열(또는 줄)의 시작
  • $ — 문자열(또는 줄)의 끝
  •  — 단어 경계
  • B — 단어 경계가 아닌 곳

그룹과 참조

  • (abc) — 캡처 그룹, 매칭 결과를 그룹으로 저장
  • (?:abc) — 비캡처 그룹, 그룹화만 하고 저장 안 함
  • (?<name>abc) — 이름 있는 캡처 그룹
  • a|b — a 또는 b (OR 연산)

룩어헤드·룩비하인드

  • (?=abc) — 앞에 abc가 있는 위치 (긍정 룩어헤드)
  • (?!abc) — 앞에 abc가 없는 위치 (부정 룩어헤드)
  • (?<=abc) — 뒤에 abc가 있는 위치 (긍정 룩비하인드)
  • (?<!abc) — 뒤에 abc가 없는 위치 (부정 룩비하인드)

실전 예제 — 바로 복사해서 쓰세요

HMApps 정규식 테스터에 아래 패턴을 붙여넣고 테스트해 보세요.

1. 이메일 주소 검증

^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$

테스트 문자열: [email protected], invalid@, [email protected]

로컬 파트(user)는 알파벳·숫자·일부 특수문자를 허용하고, @ 뒤에 도메인, 마지막에 최소 2글자의 TLD(최상위 도메인)가 있어야 합니다. 앞뒤로 ^, $를 붙여 전체 문자열이 이메일 형식인지 검사합니다.

2. 한국 휴대폰 번호

^01[016789]-?d{3,4}-?d{4}$

테스트 문자열: 010-1234-5678, 01012345678, 011-9876-5432

01[016789]로 010, 011, 016, 017, 018, 019를 허용합니다. 하이픈(-?)은 있어도 없어도 됩니다. 중간 번호는 3~4자리, 끝 번호는 4자리입니다.

광고

3. URL 추출

https?://[^s<"{}|\^`[]]+(/[^s<"{}|\^`[]]*)?

테스트 문자열: 방문 주소: https://hmapps.kr/regex-tester 참고하세요.

https?로 http와 https 모두 매칭합니다. 플래그 g를 설정하면 텍스트 내 모든 URL을 한꺼번에 추출할 수 있습니다.

4. 주민등록번호 형식 검사 (마스킹 전 형식만)

^d{6}-[1-4]d{6}$

앞 6자리(생년월일) + 하이픈 + 뒷 7자리(성별 코드 1~4 포함)인지 확인합니다. 실제 서비스에서는 주민등록번호를 직접 다루지 않도록 하고, 로직 검증 시에는 반드시 백엔드에서 처리하세요.

5. IP 주소 (IPv4)

^((25[0-5]|2[0-4]d|[01]?dd?).){3}(25[0-5]|2[0-4]d|[01]?dd?)$

각 옥텟이 0~255 범위인지 정밀하게 검사합니다. 999.999.999.999는 매칭되지 않습니다. 처음에는 복잡해 보이지만 패턴 테스터로 하나씩 분해해 보면 구조가 보입니다.

6. 날짜 형식 (YYYY-MM-DD)

^d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]d|3[01])$

연도 4자리, 월 01~12, 일 01~31을 검사합니다. 2월 30일 같은 논리적 오류까지 잡으려면 추가 로직이 필요하지만, 기본 형식 검증에는 충분합니다.

7. 비밀번호 강도 검사

^(?=.*[a-z])(?=.*[A-Z])(?=.*d)(?=.*[!@#$%^&*]).{8,}$

룩어헤드를 활용한 AND 조건입니다. 소문자·대문자·숫자·특수문자를 각각 최소 1개 포함하고 전체 길이가 8자 이상인 경우에만 매칭됩니다. 각 (?=...) 블록이 독립적인 조건을 검사하는 방식입니다.

8. 한글 텍스트만 추출

[가-힣]+

유니코드 범위로 완성형 한글 음절을 매칭합니다. g 플래그와 함께 쓰면 혼합 텍스트에서 한글 단어만 추출할 수 있습니다.

정규식 디버깅 팁 — 막혔을 때 이렇게

정규식이 의도한 대로 동작하지 않을 때 시도해볼 체크리스트입니다.

1. 메타문자 이스케이프 확인

마침표(.), 별표(*), 괄호(()), 대괄호([]), 역슬래시(), 달러($), 캐럿(^) 같은 문자를 리터럴로 쓰려면 앞에 를 붙여야 합니다. 예를 들어 도메인의 점(.)은 .로 써야 임의의 문자가 아닌 실제 점을 의미합니다.

2. 탐욕적 vs 게으른 매칭

<.+>로 HTML 태그를 매칭하면 <b>굵게</b>에서 <b>굵게</b> 전체를 가져옵니다(탐욕적). 태그 하나씩 가져오려면 <.+?>로 게으른 수량자를 사용하세요.

3. 앵커 위치 주의

m 플래그 없이 ^, $를 쓰면 전체 문자열의 시작/끝에만 적용됩니다. 여러 줄 텍스트에서 각 줄의 시작/끝을 검사하려면 반드시 m 플래그를 활성화하세요.

4. 성능 이슈: 재앙적 역추적(Catastrophic Backtracking)

(a+)+b처럼 중첩된 수량자에 매칭 실패 입력이 들어오면 지수적으로 연산이 늘어나 브라우저가 멈출 수 있습니다(ReDoS 공격의 원리이기도 합니다). 복잡한 패턴은 테스터에서 다양한 엣지 케이스로 성능을 먼저 확인하세요.

5. 패턴을 조각으로 나눠서 테스트

긴 패턴이 통째로 실패할 때는 조각별로 분리해 테스트합니다. HMApps 정규식 테스터에서 패턴의 일부를 주석처럼 비활성화하는 가장 쉬운 방법은 해당 부분만 잘라내 별도 창에서 검증하는 것입니다.

언어별 활용 예시

HMApps 테스터에서 패턴을 확정했다면, 실제 코드에 이렇게 적용합니다.

JavaScript / TypeScript

// 리터럴 방식 (권장)
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$/i;
const isValid = emailRegex.test('[email protected]'); // true

// 생성자 방식 (동적 패턴 필요 시)
const keyword = '정규식';
const searchRegex = new RegExp(keyword, 'gi');
const matches = text.match(searchRegex);

// 캡처 그룹 활용
const dateRegex = /(d{4})-(d{2})-(d{2})/;
const [, year, month, day] = '2026-08-21'.match(dateRegex);

Python

import re

pattern = re.compile(r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$')

# 검증
is_valid = bool(pattern.match('[email protected]'))

# 모든 매칭 추출
text = '연락처: [email protected], [email protected]'
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}', text)

# 치환
cleaned = re.sub(r's+', ' ', '  공백   정리  ')

명령줄 (grep)

# 이메일이 포함된 줄 추출
grep -E '[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}' access.log

# 패턴이 없는 줄 출력 (-v 옵션)
grep -vE '^#' config.txt

# 재귀 검색
grep -rE 'TODO|FIXME' ./src --include='*.ts'

정규식 테스터를 200% 활용하는 방법

단순히 패턴을 검증하는 것을 넘어, HMApps 정규식 테스터를 학습 도구로 활용하는 노하우를 정리했습니다.

1. 역방향 학습: 모르는 패턴 분석

Stack Overflow나 GitHub에서 가져온 정규식을 테스터에 붙여넣고, 테스트 문자열을 바꿔가며 어떤 패턴이 어떤 경우를 처리하는지 직접 확인하세요. 조각을 지워가며 각 부분의 역할을 파악하는 것이 가장 빠른 학습법입니다.

2. 엣지 케이스 컬렉션 만들기

이메일 검증 패턴이라면 테스트 문자열에 정상 케이스뿐 아니라 [email protected](TLD 1자리), user [email protected](공백 포함), @domain.com(로컬 파트 없음) 같은 경계 케이스를 모두 넣어 확인하세요. 프로덕션 버그의 대부분은 이런 엣지 케이스에서 발생합니다.

3. 점진적 패턴 구축

복잡한 패턴을 처음부터 완성형으로 쓰지 마세요. 가장 단순한 버전에서 시작해 조건을 하나씩 추가하면서 각 단계에서 테스트합니다. 예를 들어 URL 패턴은 https?://S+으로 시작해 쿼리 파라미터, 앵커 등을 순서대로 추가합니다.

4. 문서화와 패턴 라이브러리 구축

검증된 패턴은 팀 내부 위키나 코드 주석에 남겨두세요. 정규식은 나중에 다시 보면 작성자도 헷갈릴 수 있으므로, 의도와 예시를 함께 기록하는 것이 중요합니다.

마무리 — 정규식 마스터의 첫걸음

정규식은 처음에는 어렵게 느껴지지만, 핵심 문법 20개만 알아도 실무 문제의 80%를 해결할 수 있습니다. 중요한 것은 테스트하면서 배우는 것입니다. 책이나 문서만 읽지 말고, HMApps 정규식 테스터를 열어두고 패턴을 직접 작성하고 수정하면서 실시간 피드백을 통해 익히세요.

"정규식을 쓰면 문제가 두 개가 된다"는 유명한 농담이 있지만, 올바르게 사용한 정규식은 수십 줄의 문자열 처리 코드를 한 줄로 압축해 줍니다. 꾸준히 연습하면 어느새 정규식이 여러분의 개발 도구 중 가장 신뢰할 수 있는 것이 될 것입니다.

지금 바로 HMApps 정규식 테스터를 열고 첫 번째 패턴을 작성해 보세요. 위에서 소개한 예제부터 시작해도 좋고, 지금 당장 업무에서 필요한 검증 패턴을 만들어 봐도 좋습니다.

광고