정규표현식(Regex)이란?
정규표현식(Regular Expression, 줄여서 regex 또는 regexp)은 문자열에서 특정 패턴을 검색·매칭·치환하는 미니 프로그래밍 언어입니다. 1956년 수학자 스티븐 클레이니가 정의한 개념을 1968년 켄 톰슨이 ed 에디터에 구현한 이후, 현재는 JavaScript·Python·Java·PHP·SQL 등 거의 모든 언어와 VS Code·Sublime·노트패드++ 같은 에디터의 검색 기능에 내장되어 있습니다. 본 도구는 JavaScript ECMAScript regex 엔진을 사용하며, 패턴을 입력하면 매치 결과를 노란색으로 즉시 하이라이트하고 캡처 그룹·이름 그룹·치환 결과를 함께 표시합니다. 이메일·URL·전화번호·한글 같은 자주 쓰이는 패턴은 한 번의 클릭으로 적용 가능하며, 잘못된 패턴은 즉시 오류 메시지를 표시해 디버깅 시간을 단축합니다. 모든 매칭은 브라우저에서 수행되어 입력 데이터가 외부로 전송되지 않습니다.
정규식 문법 치트시트
| 기호 | 의미 | 예시 |
|---|---|---|
| . | 임의의 한 글자(줄바꿈 제외) | a.c → abc, axc |
| \d | 숫자 [0-9] | \d+ → 123 |
| \w | 단어 문자 [a-zA-Z0-9_] | \w+ → hello |
| \s | 공백 문자(스페이스/탭/줄바꿈) | \s+ → 공백 |
| ^ / $ | 줄 시작 / 끝 | ^Hello$ |
| * | 0회 이상 반복 | a* → 빈, a, aa |
| + | 1회 이상 | a+ → a, aa |
| ? | 0~1회(선택적) | colou?r |
| {n,m} | n~m회 | \d{3,4} |
| [abc] | a, b, c 중 하나 | [가-힣] |
| (...) | 캡처 그룹 | (\d{4})-(\d{2}) |
| | | OR(둘 중 하나) | cat|dog |
플래그(Flag) 4종
- • g (global) — 첫 매치만이 아닌 모든 매치를 찾음. 치환·일괄 검색 시 필수.
- • i (ignoreCase) — 대소문자 무시.
/hello/i는 Hello, HELLO도 매치. - • m (multiline) — ^와 $가 각 줄의 시작/끝과 매치. 여러 줄 텍스트 처리 시 필요.
- • s (dotAll) — .이 줄바꿈도 포함. 멀티라인 캡처 시 사용.
실전 정규식 예시
| 용도 | 패턴 |
|---|---|
| 한국 휴대폰 | ^01[016789]-?\d{3,4}-?\d{4}$ |
| 주민번호 앞 6자리 | ^\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$ |
| 사업자등록번호 | ^\d{3}-?\d{2}-?\d{5}$ |
| 강력한 비밀번호 | ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$ |
| YYYY-MM-DD | ^\d{4}-\d{2}-\d{2}$ |
| 한글만 추출 | [가-힣]+ |
자주 묻는 질문 (FAQ)
Q. 어떤 정규식 엔진을 사용하나요?
A. JavaScript의 RegExp(ECMAScript) 엔진을 사용합니다. PHP의 PCRE, Python의 re와는 일부 문법이 다를 수 있으니 주의하세요. 예: PCRE의 (?P<name>...) 대신 JavaScript는 (?<name>...) 사용.
Q. 캡처 그룹과 이름 그룹은 어떻게 활용하나요?
A. (...)로 묶은 부분은 매치 결과의 그룹 1, 2, ...로 추출됩니다. (?<name>...)로 이름을 붙이면 키로 접근할 수 있습니다. 치환 시 $1, $2 또는 $<name>으로 그룹을 참조하세요.
Q. 무한 루프(catastrophic backtracking)가 위험하지 않나요?
A. 본 도구는 1만 회 매치 후 자동 중단되도록 안전장치가 있어 브라우저 멈춤을 방지합니다. 중첩 수량자((a+)+)는 가급적 피하고, 명확한 패턴을 작성하세요.
Q. 입력한 패턴·문자열이 외부로 전송되나요?
A. 아니요. 모든 매칭은 브라우저에서 수행되며 외부 서버로 전송되지 않습니다. 비밀번호·내부 코드도 안전하게 테스트할 수 있습니다.
Q. 한글·이모지도 매치되나요?
A. 한글은 [가-힣], 이모지는 \p{Emoji}(u 플래그 필요) 같은 유니코드 속성으로 매치 가능합니다. 본 도구는 유니코드를 기본 지원하며, 한글 패턴도 정상 동작합니다.