이메일 주소 추출
텍스트에서 이메일 주소를 모두 찾으려면 \b[\w.-]+@[\w.-]+\.\w+\b 패턴을 사용합니다.
g 플래그를 활성화하면 텍스트 내 모든 이메일 주소를 한 번에 찾을 수 있습니다.
정규식 패턴을 입력하고 테스트 문자열에서 실시간으로 매칭 결과를 확인합니다.
매칭 결과 2건
정규식(Regular Expression) 테스터는 정규식 패턴을 입력하고 테스트 문자열에서 매칭 결과를 실시간으로 확인할 수 있는 도구입니다. g(Global), i(Case-insensitive), m(Multiline) 플래그를 지원하며, 매칭된 부분을 하이라이트로 표시합니다. 개발자가 이메일, URL, 전화번호 등의 패턴을 검증하거나, 텍스트에서 특정 패턴을 찾을 때 유용합니다. 캡처 그룹도 함께 표시되어 복잡한 정규식 디버깅에 활용할 수 있습니다.
이럴 때 이렇게 계산해요.
텍스트에서 이메일 주소를 모두 찾으려면 \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에서 특정 태그의 내용을 추출할 때 <title>(.*?)</title> 패턴을 사용합니다. 게으른 매칭(.*?)으로 가장 가까운 닫는 태그까지만 매칭합니다.
간단한 HTML 파싱에 정규식을 활용할 수 있지만, 복잡한 HTML은 전용 파서 사용이 권장됩니다.
비밀번호에 대문자, 소문자, 숫자, 특수문자가 모두 포함되어 있는지 전방탐색으로 검증합니다. ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[!@#$%]).{8,}$ 패턴을 사용합니다.
전방탐색을 조합하면 여러 조건을 동시에 검증하는 복잡한 유효성 검사를 구현할 수 있습니다.
같이 쓰면 좋아요. 옆으로 넘겨 보세요.
궁금한 거 모아 봤어요. 눌러서 펼쳐 보세요.
g(Global)는 첫 번째 매칭 이후에도 계속 검색합니다. i(Case-insensitive)는 대소문자를 구분하지 않습니다. m(Multiline)은 ^와 $가 각 줄의 시작/끝에 매칭됩니다.
괄호 ()로 묶은 부분이 캡처 그룹입니다. 매칭된 전체 문자열 외에 각 그룹의 내용을 별도로 추출할 수 있습니다. 예: (\d{4})-(\d{2})-(\d{2})는 날짜에서 연, 월, 일을 각각 캡처합니다.
탐욕적(greedy) 매칭은 가능한 가장 긴 문자열을 매칭합니다(예: .* ). 게으른(lazy) 매칭은 ?를 추가하여 가능한 가장 짧은 문자열을 매칭합니다(예: .*?). HTML 태그 내용 추출 시 게으른 매칭이 더 정확합니다.
정규식에서 . * + ? [ ] ( ) { } ^ $ | \ 등은 특수 의미를 가집니다. 이 문자를 그대로 매칭하려면 앞에 백슬래시(\)를 붙입니다. 예: \. 은 마침표 문자를, \$ 은 달러 기호를 매칭합니다.
전방탐색 (?=...) 은 특정 패턴이 뒤에 오는 위치를 매칭하고, 후방탐색 (?<=...) 은 특정 패턴이 앞에 오는 위치를 매칭합니다. 매칭 결과에는 포함되지 않아 "소비하지 않는 매칭"이라고도 합니다.
중첩된 반복자(예: (a+)+)는 카타스트로픽 백트래킹을 일으킬 수 있습니다. 입력 문자열이 길수록 처리 시간이 기하급수적으로 늘어나므로, 반복자 중첩을 피하고 구체적인 문자 클래스를 사용하는 것이 좋습니다.
이메일: [\w.-]+@[\w.-]+\.\w+, 한국 전화번호: 01[016789]-\d{3,4}-\d{4}, URL: https?://[\w.-]+(?:/\S*)?, IPv4: \d{1,3}(\.\d{1,3}){3}, 한글만: [가-힣]+ 등이 자주 사용됩니다.
정규식(Regular Expression)은 1956년 수학자 스티븐 클리니(Stephen Kleene)가 정규 언어(regular language)를 기술하기 위해 고안한 형식 언어 이론에서 출발했습니다. 정규식은 유한 오토마타(finite automaton)와 동치 관계에 있어, 모든 정규식은 대응하는 유한 상태 기계로 변환할 수 있습니다. 이 수학적 기반 덕분에 패턴 매칭의 정확성과 완전성이 보장됩니다.
정규식 엔진은 크게 DFA(결정적 유한 오토마타)와 NFA(비결정적 유한 오토마타) 방식으로 나뉩니다. JavaScript를 비롯한 대부분의 프로그래밍 언어는 NFA 기반 엔진을 사용하며, 이는 백트래킹(backtracking) 알고리즘으로 동작합니다. 패턴의 각 위치에서 가능한 경로를 탐색하고, 실패하면 이전 분기점으로 돌아가 다른 경로를 시도합니다.
정규식의 시간 복잡도는 일반적으로 O(n)이지만, 중첩된 반복자가 있는 경우 최악의 경우 O(2^n)까지 증가할 수 있습니다. 이를 "카타스트로픽 백트래킹"이라 하며, 정규식 설계 시 반복자 중첩을 피하고 원자적 그룹(atomic group)이나 소유적 수량자(possessive quantifier)를 활용하면 성능을 개선할 수 있습니다.