정규표현식 테스터
정규표현식 완벽 가이드
1. 정규표현식 기초
정규표현식(Regular Expression, Regex)은 문자열 패턴을 정의하고 검색, 추출, 대체하는 강력한 도구입니다. 문자 그대로 매칭(\d는 숫자, \w는 단어 문자)하거나 특수문자로 복잡한 패턴을 표현합니다. 예: ^[a-z]+$는 소문자만 포함된 문자열을 의미합니다. ^는 시작, $는 끝, [a-z]는 a부터 z, +는 1개 이상을 의미합니다. 거의 모든 프로그래밍 언어와 텍스트 에디터에서 지원하며, 입력 검증, 데이터 파싱, 텍스트 치환에 필수적입니다.
2. 자주 쓰는 패턴 모음
실무에서 자주 사용되는 정규표현식 패턴입니다. 이메일: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$, 전화번호(한국): ^01[0-9]-?[0-9]{3,4}-?[0-9]{4}$, URL: ^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b, 날짜(YYYY-MM-DD): ^\d{4}-\d{2}-\d{2}$, 비밀번호(최소 8자, 대소문자+숫자+특수문자): ^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$. 이 패턴들을 기본으로 프로젝트에 맞게 수정하여 사용하세요.
3. 정규식 플래그 설명
정규표현식 플래그는 검색 동작을 제어합니다. g(global): 첫 매칭만이 아닌 모든 매칭을 찾습니다. i(ignoreCase): 대소문자를 구분하지 않습니다 (/hello/i는 Hello, HELLO 모두 매칭). m(multiline): ^와 $가 각 줄의 시작/끝에 매칭됩니다. s(dotAll): .이 개행문자(\n)도 매칭합니다. u(unicode): 유니코드 전체를 올바르게 처리합니다(이모지 등). y(sticky): lastIndex 위치에서만 검색을 시작합니다. 예: /hello/gi는 대소문자 무시하고 모든 hello를 찾습니다.
4. 캡처 그룹과 후방참조
괄호()로 그룹을 만들면 매칭된 부분을 캡처하여 나중에 사용할 수 있습니다. 예: /(\d{4})-(\d{2})-(\d{2})/에서 $1은 연도, $2는 월, $3은 일입니다. JavaScript의 match() 결과 배열에 캡처 그룹이 포함됩니다. 후방참조 \1, \2는 이전 그룹과 같은 텍스트를 매칭합니다. 예: /(\w+)\s+\1/는 "hello hello"를 매칭합니다. 비캡처 그룹 (?:)은 그룹화는 하지만 캡처하지 않아 성능이 좋습니다.
5. 전방탐색과 후방탐색
전방탐색(lookahead)과 후방탐색(lookbehind)은 특정 패턴 앞/뒤를 확인하되 매칭에 포함하지 않습니다. 긍정 전방탐색 (?=): /\d(?=px)/는 px 앞의 숫자만 매칭합니다("100px"에서 100). 부정 전방탐색 (?!): /\d(?!px)/는 px 앞이 아닌 숫자만 매칭합니다. 긍정 후방탐색 (?<=): /(?<=\$)\d+/는 $ 뒤의 숫자만 매칭합니다("$100"에서 100). 부정 후방탐색 (?
6. 정규식 성능 최적화
복잡한 정규표현식은 성능 문제를 일으킬 수 있습니다. 가능한 한 구체적으로 작성하세요(.*보다는 [a-z]+). 불필요한 캡처 그룹은 비캡처 그룹(?:)으로 바꾸세요. 백트래킹을 줄이기 위해 탐욕적 수량자(*,+) 대신 게으른 수량자(*?,+?)를 사용합니다. 큰 텍스트에서는 정규식보다 문자열 메서드(indexOf, startsWith)가 빠를 수 있습니다. 정규식을 미리 컴파일하여 재사용하세요(new RegExp를 반복 생성하지 말 것). ReDoS(Regular Expression Denial of Service) 공격에 주의하여 사용자 입력을 정규식 패턴으로 직접 사용하지 마세요.