← 블로그

정규표현식 입문: 패턴 매칭의 모든 것

2025년 1월 25일 · 10분 읽기

솔직히 말할게요. 정규표현식(regex)은 처음 보면 외계어 같습니다. ^[\w.-]+@[\w.-]+\.\w{2,}$ 이런 거 보면 "이게 대체 뭐야" 싶죠. 저도 그랬습니다.

그런데 한 번 익숙해지면, 왜 다들 정규표현식 정규표현식 하는지 알게 됩니다. 텍스트 처리에서 이것만큼 강력한 도구가 없거든요.

정규표현식이 뭔데?

한 문장으로: 텍스트에서 특정 패턴을 찾는 언어입니다.

"이메일 주소만 찾고 싶어", "전화번호 형식이 맞는지 확인하고 싶어", "URL에서 도메인만 추출하고 싶어"—이런 작업을 정규표현식으로 해결합니다.

기본부터 차근차근

1. 그냥 문자 매칭

가장 간단한 정규표현식은 그냥 찾고 싶은 문자 그대로입니다.

패턴: hello

텍스트: "say hello to the world"

2. 메타문자: 특별한 의미를 가진 문자들

여기서부터 정규표현식의 진짜 힘이 나옵니다.

메타문자 의미 예시
. 아무 문자 하나 h.t → hat, hit, hot
^ 문자열 시작 ^Hello → Hello로 시작하는 문자열
$ 문자열 끝 world$ → world로 끝나는 문자열
* 앞 문자 0번 이상 ab*c → ac, abc, abbc, abbbc...
+ 앞 문자 1번 이상 ab+c → abc, abbc, abbbc... (ac는 X)
? 앞 문자 0번 또는 1번 colou?r → color, colour

3. 문자 클래스: 여러 문자 중 하나

대괄호 [] 안에 있는 문자 중 하나와 매칭됩니다.

[aeiou] → 모음 하나

[0-9] → 숫자 하나

[a-zA-Z] → 영문자 하나

[^0-9] → 숫자가 아닌 문자 (^가 안에 있으면 "제외")

4. 미리 정의된 문자 클래스

자주 쓰는 패턴은 단축 표현이 있습니다.

단축 의미 동일 표현
\d 숫자 [0-9]
\w 단어 문자 [a-zA-Z0-9_]
\s 공백 문자 스페이스, 탭, 줄바꿈
\D, \W, \S 대문자 = 반대 숫자 아닌 것, 단어 문자 아닌 것...

실전 예제

이메일 검증 (간단 버전)

[\w.-]+@[\w.-]+\.\w{2,}

분해해보면:

  • [\w.-]+ : 단어문자, 점, 하이픈이 1개 이상 (아이디 부분)
  • @ : 골뱅이
  • [\w.-]+ : 도메인 이름
  • \. : 점 (\.로 이스케이프 해야 진짜 점)
  • \w{2,} : 2자 이상의 단어 문자 (com, net, co.kr 등)

한국 휴대폰 번호

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

010, 011, 016, 017, 018, 019로 시작하고, 중간에 하이픈은 있어도 되고 없어도 됩니다.

HTML 태그 제거

<[^>]+>

<로 시작하고, >가 아닌 문자가 1개 이상, >로 끝나는 패턴. 모든 HTML 태그를 찾습니다.

자주 하는 실수

1. 이스케이프 깜빡

점(.), 별표(*), 괄호 등은 특별한 의미가 있어서, 그 문자 자체를 찾으려면 앞에 \를 붙여야 합니다. 1+1=2를 찾으려면 1\+1=2

2. 탐욕적 매칭

.*는 가능한 많이 매칭합니다. <.*><b>hi</b>를 매칭하면 <b>만 아니라 전체가 매칭됩니다. <.*?>처럼 ?를 붙이면 최소 매칭(게으른 매칭)이 됩니다.

3. 앵커 빠뜨리기

\d{3}은 "숫자 3개"를 찾는데, "12345"에서도 매칭됩니다. 정확히 3개만 원하면 ^\d{3}$처럼 앵커를 써야 합니다.

연습이 답이다

정규표현식은 읽는 것보다 직접 써보는 게 훨씬 빨리 익숙해집니다. 아래 도구에서 직접 테스트해보세요. 실시간으로 매칭 결과를 보면서 연습하면 금방 감이 옵니다.