유틸리티

정규식(정규표현식) 기초와 온라인 테스트 방법

로그 파일에서 이메일 주소만 뽑아내야 하는데, 텍스트가 수천 줄이다. Ctrl+F로는 한계가 있다. 정규표현식(Regular Expression, Regex)을 쓰면 "이메일 형식에 맞는 문자열"을 한 줄의 패턴으로 찾아낼 수 있다.

정규식 기본 문법

패턴의미예시
.아무 문자 1개a.c → abc, a1c, a-c
\d숫자 1개 (0~9)\d{3} → 123, 456
\w알파벳, 숫자, 밑줄\w+ → hello, user_1
\s공백 문자\s → 스페이스, 탭
+1회 이상 반복a+ → a, aa, aaa
*0회 이상 반복ab* → a, ab, abb
?0회 또는 1회colou?r → color, colour
[ ]문자 집합[aeiou] → 모음 한 글자
^줄의 시작^Hello → Hello로 시작하는 줄
$줄의 끝end$ → end로 끝나는 줄

자주 쓰는 정규식 패턴

이메일

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

@ 앞뒤로 영문, 숫자, 일부 특수문자가 오고 마지막에 도메인(com, kr 등)이 오는 구조다.

전화번호 (한국)

01[0-9]-\d{3,4}-\d{4}

010, 011 등으로 시작하고 하이픈으로 구분된 형식을 매칭한다.

한글만

[가-힣]+

완성된 한글 문자만 선택한다. 자음이나 모음만 있는 경우(ㅋㅋ)는 포함되지 않는다.

실시간으로 테스트하면서 배우기

정규식은 머릿속으로 익히기 어렵다. 패턴을 써보고, 어떤 문자열이 매칭되는지 바로 확인하면서 익히는 게 가장 빠르다. 정규식 테스터에 패턴과 테스트 문자열을 넣으면 매칭된 부분이 실시간으로 하이라이트된다. 캡처 그룹까지 상세히 보여주기 때문에, 괄호로 묶은 부분이 어떻게 추출되는지 확인하기 좋다.

TIP 프리셋 패턴(이메일, URL, 전화번호 등)이 내장되어 있으니, 처음 시작할 때는 프리셋을 불러와서 구조를 분석해보는 것부터 하면 이해가 빠르다.

플래그 옵션

  • g (global) — 첫 번째 매칭에서 멈추지 않고 전체를 검색한다. 거의 항상 켜두는 옵션.
  • i (ignore case) — 대소문자를 구분하지 않는다. Hellohello를 같은 것으로 취급.
  • m (multiline)^$가 전체 텍스트가 아닌 각 줄의 시작과 끝에 매칭된다.
  • s (dotAll).이 줄바꿈 문자까지 포함해서 매칭한다.

정규식은 처음에 기호가 많아서 복잡해 보이지만, 기본 문법 10가지만 익히면 대부분의 패턴을 읽고 쓸 수 있다. 테스터에서 직접 돌려보면서 감을 잡는 게 가장 효과적이다.