MODOO HUB ← 모두의 툴
Developer · Instrument

Regex 치트시트

정규식 특수문자·패턴 완전 참조표 + 실시간 테스터

실시간 Regex 테스터
결과 (매칭 하이라이트)

📖 정규식 매칭 개수는 뜨는데 하이라이트가 안 보이는 이유 가이드 보기

정규식 치트시트란?

정규식(Regex)의 모든 특수문자, 수량자, 그룹, 앵커, 플래그를 한눈에 볼 수 있는 참조표입니다. 실시간 테스터는 JavaScript RegExp가 지원하는 6개 플래그 중 g(전역)·i(대소문자 무시)·m(다중행)·s(dotAll)·u(유니코드)·y(sticky)까지 모두 체크박스로 켜고 끄며 실제 매칭 결과 변화를 확인할 수 있습니다. 다만 매칭 결과 하이라이트는 문자를 실제로 감싸는 방식이라, a*처럼 길이 0짜리 매칭(빈 문자열 매칭)이 발생하면 "매칭 개수"에는 정상적으로 카운트되지만 화면에는 폭이 0이라 아무것도 보이지 않을 수 있습니다 — 매칭 자체가 없는 게 아니라 시각적으로만 안 보이는 것이니 참고하세요. JavaScript, Python, Java, PHP 등 대부분의 언어에 적용되는 표준 정규식 문법을 다룹니다.

자주 묻는 질문

\d와 [0-9]의 차이는?

기본적으로 동일합니다. 단, u(유니코드) 플래그를 켠 상태에서 \p{Nd}처럼 유니코드 속성 이스케이프를 쓰면 아랍 숫자 외의 다른 문자 체계 숫자도 포함할 수 있는데, \d 자체는 유니코드 모드에서도 여전히 ASCII 숫자([0-9])만 의미합니다.

욕심쟁이(greedy)와 게으른(lazy) 수량자 차이는?

욕심쟁이(*)는 가능한 많이 매칭한 뒤 실패하면 한 글자씩 양보하며 되돌아가고, 게으른(*?)은 가능한 적게 매칭한 뒤 실패하면 한 글자씩 늘려가며 다시 시도합니다. 결과가 같아 보여도 백트래킹 횟수가 달라 성능 차이가 날 수 있습니다.

전방 탐색(lookahead)과 후방 탐색(lookbehind)은 무엇인가요?

(?=abc)는 뒤에 abc가 오는 위치를 찾되 abc 자체는 매칭 결과에 포함하지 않는 전방 탐색이고, (?<=abc)는 반대로 앞에 abc가 있는 위치를 찾는 후방 탐색입니다. 둘 다 "너비 0" 어서션이라 실제 문자를 소비하지 않습니다.

캡처 그룹과 비캡처 그룹의 차이는?

(...)는 캡처 그룹으로 매칭 내용을 $1, \1 등으로 나중에 참조할 수 있고, (?:...)는 그룹화만 하고 참조는 불가능한 대신 캡처 배열에 항목이 늘지 않아 약간 더 가볍습니다.

u(유니코드)·y(sticky) 플래그는 언제 사용하나요?

u 플래그는 서로게이트 페어로 이루어진 이모지 등을 하나의 문자로 올바르게 처리하고 \u{...} 코드포인트 이스케이프와 \p{...} 유니코드 속성 이스케이프를 활성화합니다. y(sticky) 플래그는 lastIndex 위치에서만 매칭을 시도하고 앞으로 스캔하지 않아, g 플래그처럼 문자열 전체를 훑지 않고 "정확히 여기서부터 매칭되는가"만 확인할 때 씁니다. 이 페이지의 실시간 테스터에서 두 플래그를 모두 켜고 끄며 실제 매칭 결과가 어떻게 달라지는지 확인할 수 있습니다.

매칭 개수는 표시되는데 하이라이트가 안 보이는 경우가 있나요?

네, a*처럼 길이 0짜리(빈 문자열) 매칭이 발생하는 패턴을 사용하면 그렇습니다. 매칭 자체는 정상적으로 카운트되지만, 하이라이트가 문자를 감싸는 방식이라 폭이 0인 매칭은 화면에 아무것도 보이지 않게 표시됩니다.

정규식 성능 이슈가 생길 수 있나요?

중첩된 수량자((a+)+처럼)는 입력에 따라 백트래킹 경우의 수가 지수적으로 늘어나는 "파국적 백트래킹(catastrophic backtracking)"을 일으켜 브라우저가 멈춘 것처럼 보일 수 있습니다. 복잡한 패턴은 가능하면 수량자 중첩을 피하거나 원자 그룹으로 대체하는 것이 안전합니다.

정규식 생성기 도구도 있나요?

regex-generator 도구에서 이메일, URL, 전화번호 등 패턴별 정규식을 자동 생성할 수 있습니다.