정규표현식 테스터

정규표현식과 테스트 문자열을 입력하면 일치하는 부분을 실시간으로 하이라이트하고, 매치별 위치·캡처 그룹(이름 있는 그룹 포함)과 치환 결과를 보여 줍니다. 자주 쓰는 패턴은 버튼 한 번으로 불러올 수 있습니다.

//
플래그: g 전체 · i 대소문자 무시 · m 여러 줄 · s 점이 줄바꿈 포함 · u 유니코드 · y 고정 위치. g를 빼면 첫 매치만 표시합니다.

정규표현식이란?

정규표현식(regular expression, regex)은 문자열의 "모양"을 기호로 적어 검색·검증·추출·치환하는 표기법입니다. "010으로 시작하고 하이픈이 있을 수도 없을 수도 있는 11자리 번호"처럼 말로 하면 긴 조건을 한 줄로 쓸 수 있어 폼 입력 검증, 로그 분석, 텍스트 일괄 수정, 크롤링 후 데이터 정리에 두루 쓰입니다. 이 도구는 브라우저의 자바스크립트(ECMAScript) 정규식 엔진을 그대로 사용하므로, 여기서 통과한 패턴은 자바스크립트 코드의 new RegExp(...)에 그대로 넣어 쓸 수 있습니다. Python, Java, PCRE(PHP 등)와는 일부 문법과 동작이 다르다는 점은 아래 "다른 언어와의 차이"에서 설명합니다.

기본 문법 요약

표기의미예
.줄바꿈을 제외한 아무 한 글자 (s 플래그 시 줄바꿈 포함)a.c → abc, a1c
\d \w \s숫자 / 영문·숫자·밑줄 / 공백류\d\d → 12
[abc] [^abc]목록 중 한 글자 / 목록 제외 한 글자[가-힣] → 한글 한 글자
* + ?0회 이상 / 1회 이상 / 0~1회ab+ → ab, abbb
a{2,3}반복 횟수 지정 (2~3회)\d{4} → 숫자 4자리
^ $문자열(m 플래그 시 각 줄)의 시작 / 끝^abc$
\b단어 경계 (영문·숫자·밑줄 기준)\bcat\b
(…) (?:…)캡처 그룹 / 캡처하지 않는 그룹(ab)+
a|b또는cat|dog
(?=…) (?!…)뒤에 …가 있음 / 없음 (전방탐색)\d+(?=원)
(?<=…) (?<!…)앞에 …가 있음 / 없음 (후방탐색)(?<!\d)\d{5}(?!\d)

\b와 \w는 기본적으로 영문·숫자·밑줄만 "단어 문자"로 보기 때문에 한글은 단어 문자가 아닙니다. 예를 들어 \w+는 한글 문장에서 한글을 잡아내지 못하고, 한글을 찾으려면 [가-힣](완성형 음절) 또는 자음·모음까지 포함하는 [ㄱ-ㅎㅏ-ㅣ가-힣]을 써야 합니다.

플래그(flags)

이 도구는 g 플래그를 빼면 첫 번째 매치만 표시해 실제 exec 동작과 같게 보여 줍니다. 같은 문자를 중복하거나 존재하지 않는 플래그를 넣으면 오류 메시지가 나옵니다.

자주 쓰는 패턴 (한국 환경, 실행 확인 완료)

아래 패턴은 모두 위 "예시 패턴 불러오기" 버튼에 넣어 두었고, 제시한 예문에서 의도대로 매치되거나 제외되는 것을 Node.js로 확인했습니다.

휴대폰·유선 전화번호

\b01[016789]-?\d{3,4}-?\d{4}\b은 010, 011, 016, 017, 018, 019로 시작하고 하이픈은 있어도 없어도 되는 번호를 찾습니다. 예문에서 010-1234-5678과 01712345678은 매치되고 자릿수가 모자란 010-12-5678이나 13자리 숫자 0101234567890의 일부는 앞뒤 \b 덕분에 매치되지 않습니다. 단, 하이픈을 각각 선택으로 두었기 때문에 010-12345678처럼 하이픈이 한쪽에만 있는 표기도 통과합니다. 표기를 통일해야 하면 하이픈 있는 형식과 없는 형식을 |로 나눠 따로 쓰세요. 유선 번호는 \b0(?:2|3[1-3]|4[1-4]|5[1-5]|6[1-4])-\d{3,4}-\d{4}\b로, 서울(02)과 경기·충청·경상·전라·제주권 지역번호(031~033, 041~044, 051~055, 061~064)를 허용합니다. 인터넷전화 070이나 대표번호 1588 등은 일부러 제외했으니 필요하면 대체 패턴을 추가하세요. 다만 번호 형식만 검사할 뿐 실제 사용 중인 번호인지는 알 수 없습니다.

이메일

\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b은 일반적인 이메일 형태(영문·숫자·일부 기호 @ 도메인 . 최상위 도메인)를 찾습니다. 예문에서 [email protected], [email protected]은 매치되고 bad@x(최상위 도메인 없음)나 @no.com은 제외됩니다. 그러나 이메일 주소의 전체 규격(RFC 5322)은 훨씬 복잡해서 이 정도 패턴으로 모든 유효 주소를 거르거나 모든 오타를 잡아낼 수는 없습니다. 한글 도메인이나 따옴표가 들어간 특이한 주소는 통과하지 못합니다. 가입 폼에서는 느슨한 형식 검사 후 실제 인증 메일을 보내 확인하는 것이 정석입니다.

날짜(YYYY-MM-DD)

\b(\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])\b는 월을 01~12, 일을 01~31로 제한하고 연·월·일을 각각 캡처합니다. 예문 2026-13-01(13월)은 제외되지만 2026-02-31은 통과합니다. 정규식은 "형식"만 보기 때문에 2월 31일 같은 달력상 불가능한 날짜는 걸러내지 못합니다. 날짜의 실제 유효성은 정규식 후 Date 객체나 날짜 라이브러리로 확인하세요.

그 밖의 패턴

탐욕적 vs 비탐욕적 매칭

*, +, {n,m}는 기본적으로 가능한 한 많이 매치하는 탐욕적(greedy)입니다. 뒤에 ?를 붙이면 최소한만 매치하는 비탐욕적(lazy)이 됩니다. 예문 <b>첫째</b> 그리고 <b>둘째</b>에서 <b>.*<\/b>는 첫 <b>부터 마지막 </b>까지 전체를 하나의 매치로 잡고,<b>.*?<\/b>는 각각 따로 둘로 나눠 잡습니다. 위 "탐욕 .* (함정)"과 "비탐욕 .*?" 버튼으로 매치 개수가 1개와 2개로 갈리는 것을 바로 확인해 보세요. 더 안전한 방법은 . 대신 [^<]*처럼 "닫는 문자를 제외한" 부정 문자 클래스를 쓰는 것으로, 속도도 더 예측 가능합니다.

ReDoS: 정규식이 서버와 브라우저를 멈추게 하는 경우

자바스크립트를 포함한 많은 정규식 엔진은 백트래킹 방식이라, 반복이 중첩된 패턴은 특정 입력에서 시도 횟수가 입력 길이에 따라 기하급수적으로 늘어납니다. 이를 ReDoS(정규식 서비스 거부)라고 부릅니다. 대표적인 위험 형태는 ^(a+)+$처럼 반복 안에 반복이 들어간 것입니다. 이 패턴에 aaaa…a 뒤에 b를 붙여 시험하면, 필자가 Node.js에서 a 26개로 직접 시험했을 때 몇 초가 걸렸습니다(환경에 따라 다름). 이 도구에서 직접 시험하다가 탭이 멈추면 브라우저가 응답할 때까지 기다리거나 탭을 닫아야 합니다. 반면 같은 의도의 ^a+$는 즉시 끝납니다.

이 도구는 계산이 100ms를 넘으면 상태 줄에 경고를 띄웁니다. 단 실행 도중 중단할 수는 없으므로 의심스러운 패턴은 짧은 테스트 문자열로 먼저 시험하세요.

캡처 그룹, 이름 있는 그룹, 치환

괄호로 묶은 부분은 캡처 그룹이 되어 매치 목록에 번호별로 표시됩니다. (?<year>\d{4})-(?<month>\d{2})처럼 (?<이름>…) 형태의 이름 있는 그룹을 쓰면 번호 대신 이름으로 값을 읽을 수 있어 패턴이 길어져도 유지보수가 쉽습니다. 치환 입력란에서는 $1(1번 그룹), $&(매치 전체), $<이름>(이름 있는 그룹)을 쓸 수 있습니다. 검산 예시: 날짜 패턴에 2026-10-13을 넣고 치환 문자열을 $3/$2/$1로 쓰면 13/10/2026이 됩니다. 선택적 그룹이 매치되지 않으면 값이 "(없음)"으로 표시됩니다.

다른 언어와의 차이

정규식을 쓰면 안 되는 경우

HTML·JSON·XML처럼 중첩 구조가 있는 형식을 정규식만으로 완벽히 해석하는 것은 불가능에 가깝습니다. 이런 데이터는 전용 파서를 쓰세요. 이메일 주소나 전화번호의 "존재 여부", 날짜의 달력상 유효성, 주민등록번호의 진위 같은 의미 검증도 정규식의 몫이 아닙니다. 정규식은 형식 필터로 쓰고 의미 확인은 별도 로직으로 하세요. 또 개인정보가 담긴 실제 데이터를 테스트 문자열에 넣을 때는 이 도구가 브라우저 안에서만 처리하더라도 필요 이상 입력하지 않는 편이 안전합니다.

자주 묻는 질문

캡처 그룹은 어떻게 확인하나요?

패턴에 괄호 ( )를 사용하면 캡처 그룹이 생성됩니다. 매치 목록의 각 항목 아래에 그룹 번호별 값이 표시되고, 이름 있는 그룹은 이름과 값도 함께 나옵니다.

정규표현식이 틀리면 어떻게 되나요?

패턴 문법 오류가 있으면 상태 표시줄에 브라우저가 알려 주는 오류 메시지가 표시됩니다. 괄호나 대괄호가 짝이 맞는지, 특수문자를 이스케이프(\) 처리했는지, 플래그가 올바른지 확인해 보세요.

g 플래그를 빼면 왜 하나만 보이나요?

g가 없으면 첫 번째 매치에서 멈추는 것이 자바스크립트의 기본 동작입니다. 모든 매치를 찾거나 모든 곳을 치환하려면 g를 포함하세요.

한글이 \w에 매치되지 않는 이유는 무엇인가요?

\w는 [A-Za-z0-9_]와 같아서 한글 음절은 포함되지 않습니다. 한글은 [가-힣]을, 한글·영문·숫자를 함께 쓰려면 [가-힣A-Za-z0-9]처럼 직접 범위를 지정하세요. u 플래그와 \p{L}를 쓰면 모든 언어의 글자를 잡을 수 있습니다.

이메일 정규식으로 유효한 주소인지 완벽하게 검증할 수 있나요?

아니요. 형식 검사만 가능하고 실제 존재하는 주소인지는 확인할 수 없습니다. 인증 메일 발송이 가장 확실한 방법이고, 정규식은 명백한 오타를 걸러 내는 1차 필터로 쓰는 것이 적절합니다.

관련 도구