KO
guide

Regular Expressions Beginner's Guide — Syntax, Examples, and Common Patterns

2026-03-05 · 7 min read

정규표현식이란?

**정규표현식(Regular Expression, 줄여서 Regex 또는 RegExp)**은 문자열의 패턴을 표현하는 특수한 문법입니다. 쉽게 말하면, “이런 모양의 문자열을 찾아라” 또는 “이런 패턴과 일치하는지 확인해라”라고 컴퓨터에게 지시하는 언어입니다.

정규표현식을 사용하면 다음과 같은 일을 할 수 있습니다.

  • 이메일 주소가 올바른 형식인지 검증
  • 전화번호에서 숫자만 추출
  • 특정 패턴의 텍스트를 찾아서 일괄 교체
  • 로그 파일에서 에러 메시지만 필터링
  • 비밀번호 강도 조건 검사

처음에는 암호처럼 보이지만, 기본 규칙을 알면 생각보다 어렵지 않습니다.


기본 문법

리터럴 문자

가장 단순한 패턴은 그냥 찾으려는 문자 자체를 씁니다. cat이라는 패턴은 문자열에서 “cat”을 찾습니다.

메타 문자 (특수 의미를 가진 문자)

정규표현식에서 특별한 의미를 가진 문자들이 있습니다. 이것들이 정규표현식의 힘입니다.

메타 문자의미예시
.임의의 문자 1개c.t → cat, cut, c1t
*앞 문자 0회 이상 반복ab* → a, ab, abb, abbb
+앞 문자 1회 이상 반복ab+ → ab, abb, abbb
?앞 문자 0회 또는 1회colou?r → color, colour
^문자열의 시작^Hello → Hello로 시작하는 것
$문자열의 끝world$ → world로 끝나는 것
|또는 (OR)cat|dog → cat 또는 dog
()그룹 묶기(ab)+ → ab, abab, ababab
[]문자 클래스[aeiou] → 모음 중 하나
{}반복 횟수 지정a{3} → aaa

문자 클래스 []

대괄호 안에 허용할 문자들을 나열합니다.

  • [abc] — a, b, c 중 하나
  • [a-z] — 소문자 알파벳 하나
  • [A-Z] — 대문자 알파벳 하나
  • [0-9] — 숫자 하나
  • [^abc] — a, b, c를 제외한 모든 문자 (^는 클래스 안에서 부정 의미)

자주 쓰는 단축 표기

단축 표기의미동등한 표현
\d숫자[0-9]
\D숫자 아닌 것[^0-9]
\w영문자, 숫자, 언더스코어[a-zA-Z0-9_]
\W\w가 아닌 것[^a-zA-Z0-9_]
\s공백 문자 (스페이스, 탭, 줄바꿈)
\S공백 아닌 것
\b단어 경계
\n줄바꿈
\t

반복 횟수 지정 {}

  • a{3} — a가 정확히 3번: aaa
  • a{2,4} — a가 2~4번: aa, aaa, aaaa
  • a{2,} — a가 2번 이상

실전 예제

예제 1: 이메일 주소 검증

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

분석:

  • ^ — 문자열 시작
  • [a-zA-Z0-9._%+-]+ — 영문, 숫자, 특수문자로 된 로컬 파트 (1자 이상)
  • @ — 골뱅이 기호 (리터럴)
  • [a-zA-Z0-9.-]+ — 도메인 이름
  • \. — 점 (.을 이스케이프해야 리터럴 점이 됨)
  • [a-zA-Z]{2,} — 최소 2글자의 최상위 도메인 (com, kr, net 등)
  • $ — 문자열 끝

일치 예시: user@example.com, hong.gildong@company.co.kr

불일치 예시: user@, @example.com, user@.com

예제 2: 한국 전화번호 검증

^0[0-9]{1,2}-?[0-9]{3,4}-?[0-9]{4}$

분석:

  • ^0 — 0으로 시작
  • [0-9]{1,2} — 12자리 숫자 (지역번호: 199)
  • -? — 하이픈이 있어도 되고 없어도 됨
  • [0-9]{3,4} — 3~4자리 중간 번호
  • -? — 하이픈 선택
  • [0-9]{4} — 4자리 끝 번호
  • $ — 문자열 끝

일치 예시: 010-1234-5678, 0212345678, 02-123-4567

예제 3: URL 유효성 간단 검사

^https?:\/\/(www\.)?[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(\/\S*)?$

일치 예시: https://www.example.com, http://blog.example.co.kr/post/123

예제 4: 비밀번호 강도 검사 (영문+숫자+특수문자, 8자 이상)

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

분석:

  • (?=.*[a-zA-Z]) — 영문자 최소 1개 포함 (lookahead)
  • (?=.*\d) — 숫자 최소 1개 포함 (lookahead)
  • (?=.*[!@#$%^&*]) — 특수문자 최소 1개 포함
  • .{8,} — 전체 8자 이상

예제 5: 날짜 형식 (YYYY-MM-DD)

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

일치 예시: 2026-03-15, 1999-12-31

불일치 예시: 2026-13-01, 26-03-15


자주 쓰는 패턴 모음

공백 제거

^\s+|\s+$

문자열 앞뒤 공백 제거 (trim). 코드에서 replace(/^\s+|\s+$/g, '')로 사용.

연속 공백을 하나로

\s+

replace(/\s+/g, ' ')로 여러 공백을 하나로 압축.

한국어만 추출

[가-힣]+

유니코드 가나다 범위로 한글(완성형)을 매칭.

영문자만 추출

[a-zA-Z]+

숫자만 추출

\d+

HTML 태그 제거

<[^>]*>

replace(/<[^>]*>/g, '')로 모든 HTML 태그 제거.

IP 주소

^(\d{1,3}\.){3}\d{1,3}$

정규표현식 플래그

정규표현식 패턴 뒤에 플래그를 붙여 동작을 변경할 수 있습니다.

플래그의미
g전체 검색 (첫 번째 매치만이 아닌 모든 매치)
i대소문자 구분 없음
m여러 줄 모드 (^, $가 각 줄의 시작/끝 의미)
s.이 줄바꿈도 매칭

예시: /hello/gi — 대소문자 구분 없이 모든 “hello” 찾기


주의사항

탐욕적(Greedy) vs 게으른(Lazy) 매칭

.*는 기본적으로 탐욕적(greedy)이어서 가능한 한 많이 매칭합니다. "hello" and "world"에서 ".*"를 사용하면 첫 번째 "부터 마지막 "까지 모두 매칭합니다.

게으른(lazy) 매칭을 원하면 ?를 추가합니다: ".*?"는 각 따옴표 쌍을 개별적으로 매칭합니다.

특수 문자 이스케이프

., *, +, ?, (, ), [, ], {, }, ^, $, |, \ 등은 메타 문자이므로, 리터럴로 사용하려면 앞에 \를 붙여야 합니다. 예: 점(.)을 그대로 매칭하려면 \. 사용.


마무리

정규표현식은 처음 보면 무서운 기호들의 나열처럼 보이지만, 기본 문법 몇 가지를 익히면 강력한 텍스트 처리 도구가 됩니다. 자주 쓰는 패턴을 몇 개만 외워두고, 나머지는 필요할 때 찾아 쓰는 방식으로 접근하는 것이 현실적입니다.

더 많은 정규표현식 패턴과 인터랙티브 테스트 도구는 정규표현식 치트시트에서 확인해보세요.