유틸리티

정규식 테스트, 패턴 작성부터 매칭 확인까지 한번에

정규표현식을 코드에 넣고 실행했는데 기대와 다른 결과가 나온다. 패턴이 틀린 건지 입력 데이터가 문제인지 알기 어렵다. 코드를 수정하고 다시 실행하기를 반복하는 것보다, 패턴만 따로 테스트하는 편이 훨씬 빠르다.

자주 쓰는 정규식 패턴

용도패턴설명
이메일[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}기본적인 이메일 형식 검증
전화번호01[016789]-?\d{3,4}-?\d{4}한국 휴대폰 번호, 하이픈 유무 모두 매칭
한글만[가-힣]+한글 음절 범위만 추출
숫자만\d+연속된 숫자 추출

이 패턴들은 기본형이라 실무에서는 조건이 더 복잡해진다. 그래서 코드에 넣기 전에 테스트 과정이 필요하다.

플래그 옵션 정리

g (global)
첫 번째 매칭에서 멈추지 않고 전체 텍스트에서 모든 매칭을 찾는다.
i (ignore case)
대소문자를 구분하지 않는다. /hello/i는 Hello, HELLO, hElLo 모두 매칭된다.
m (multiline)
^$가 전체 텍스트가 아닌 각 줄의 시작과 끝에 적용된다.
s (dotAll)
점(.)이 줄바꿈 문자까지 포함해서 매칭된다.

테스트 방법

정규식 테스터에 패턴을 입력하고 아래 테스트 문자열 칸에 검증할 텍스트를 넣으면 매칭된 부분이 실시간으로 하이라이트된다. 몇 개가 매칭됐는지, 각 매칭의 위치와 캡처 그룹 정보도 함께 보여준다.

이메일, URL, 전화번호, 한글 등 자주 쓰는 패턴은 프리셋으로 제공되니까 직접 치지 않고 클릭만으로 불러올 수 있다. 주요 메타문자(\d, \w, \s 등)와 수량자(+, *, {n,m}) 레퍼런스도 한 화면에 있어서 문법을 찾느라 탭을 오갈 필요가 없다.

TIP 정규식이 느려진다면 탐욕적 수량자(.*) 대신 게으른 수량자(.*?)를 써보자. 불필요한 백트래킹을 줄여서 매칭 속도가 확 올라간다.