정규식 테스터
정규식 패턴을 입력하고 테스트 문자열에서 실시간으로 매칭 결과를 확인합니다.
정규식(Regular Expression) 테스터는 정규식 패턴을 입력하고 테스트 문자열에서 매칭 결과를 실시간으로 확인할 수 있는 도구입니다. g(Global), i(Case-insensitive), m(Multiline) 플래그를 지원하며, 매칭된 부분을 하이라이트로 표시합니다. 개발자가 이메일, URL, 전화번호 등의 패턴을 검증하거나, 텍스트에서 특정 패턴을 찾을 때 유용합니다. 캡처 그룹도 함께 표시되어 복잡한 정규식 디버깅에 활용할 수 있습니다.
정규식 패턴
테스트 문자열
매칭 결과
2건매치 상세
principle
계산 원리
정규식(Regular Expression)은 1956년 수학자 스티븐 클리니(Stephen Kleene)가 정규 언어(regular language)를 기술하기 위해 고안한 형식 언어 이론에서 출발했습니다. 정규식은 유한 오토마타(finite automaton)와 동치 관계에 있어, 모든 정규식은 대응하는 유한 상태 기계로 변환할 수 있습니다. 이 수학적 기반 덕분에 패턴 매칭의 정확성과 완전성이 보장됩니다.
정규식 엔진은 크게 DFA(결정적 유한 오토마타)와 NFA(비결정적 유한 오토마타) 방식으로 나뉩니다. JavaScript를 비롯한 대부분의 프로그래밍 언어는 NFA 기반 엔진을 사용하며, 이는 백트래킹(backtracking) 알고리즘으로 동작합니다. 패턴의 각 위치에서 가능한 경로를 탐색하고, 실패하면 이전 분기점으로 돌아가 다른 경로를 시도합니다.
정규식의 시간 복잡도는 일반적으로 O(n)이지만, 중첩된 반복자가 있는 경우 최악의 경우 O(2^n)까지 증가할 수 있습니다. 이를 "카타스트로픽 백트래킹"이라 하며, 정규식 설계 시 반복자 중첩을 피하고 원자적 그룹(atomic group)이나 소유적 수량자(possessive quantifier)를 활용하면 성능을 개선할 수 있습니다.
faq
자주 묻는 질문
cases
실생활 예시
이메일 주소 추출
텍스트에서 이메일 주소를 모두 찾으려면 \b[\w.-]+@[\w.-]+\.\w+\b 패턴을 사용합니다.
g 플래그를 활성화하면 텍스트 내 모든 이메일 주소를 한 번에 찾을 수 있습니다.
전화번호 형식 검증
한국 전화번호 형식(010-1234-5678)을 검증하려면 ^01[016789]-\d{3,4}-\d{4}$ 패턴을 사용합니다.
입력된 전화번호가 올바른 형식인지 실시간으로 확인할 수 있습니다.
로그 파일에서 에러 메시지 추출
서버 로그에서 에러 라인만 추출하려면 ^\[ERROR\].*$ 패턴을 m 플래그와 함께 사용합니다. 타임스탬프까지 캡처하려면 ^\[(\d{4}-\d{2}-\d{2})\]\s*\[ERROR\]\s*(.*)$ 을 사용합니다.
캡처 그룹으로 날짜와 에러 메시지를 분리 추출하여 분석에 활용할 수 있습니다.
HTML 태그 내용 추출
HTML에서 특정 태그의 내용을 추출할 때 <title>(.*?)</title> 패턴을 사용합니다. 게으른 매칭(.*?)으로 가장 가까운 닫는 태그까지만 매칭합니다.
간단한 HTML 파싱에 정규식을 활용할 수 있지만, 복잡한 HTML은 전용 파서 사용이 권장됩니다.
비밀번호 강도 검증
비밀번호에 대문자, 소문자, 숫자, 특수문자가 모두 포함되어 있는지 전방탐색으로 검증합니다. ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%]).{8,}$ 패턴을 사용합니다.
전방탐색을 조합하면 여러 조건을 동시에 검증하는 복잡한 유효성 검사를 구현할 수 있습니다.
glossary
용어 사전
- 정규식 (Regular Expression)
- 문자열에서 특정 패턴을 찾거나 검증하기 위한 형식 언어로, 특수 기호와 문자의 조합으로 패턴을 기술합니다.
- 캡처 그룹 (Capture Group)
- 괄호 ()로 묶인 정규식 부분으로, 매칭된 하위 문자열을 별도로 추출할 수 있게 합니다.
- 플래그 (Flag)
- 정규식의 동작 방식을 변경하는 옵션으로, g(전역), i(대소문자 무시), m(멀티라인) 등이 있습니다.
- 백트래킹 (Backtracking)
- 정규식 엔진이 매칭 실패 시 이전 분기점으로 돌아가 다른 경로를 시도하는 탐색 방식입니다.
- 전방탐색 (Lookahead)
- (?=...) 구문으로, 특정 패턴이 뒤에 오는지 확인하되 매칭 결과에는 포함시키지 않는 영폭 단언입니다.
- 문자 클래스 (Character Class)
- 대괄호 [] 안에 매칭할 문자 집합을 정의하는 것으로, [a-z]는 소문자 알파벳 전체를 의미합니다.
- 수량자 (Quantifier)
- 패턴의 반복 횟수를 지정하는 기호로, *(0회 이상), +(1회 이상), ?(0 또는 1회), {n,m}(n~m회) 등이 있습니다.
- 이스케이프 (Escape)
- 백슬래시(\)를 사용하여 특수 문자의 의미를 제거하고 문자 그대로 매칭하도록 하는 것입니다.
next tools