🌐 KO

🔣 정규표현식 테스터

정규표현식 패턴을 실시간으로 테스트하고 매칭 결과를 확인합니다. 플래그 설정, 그룹 캡처, 자주 사용하는 패턴 라이브러리를 제공합니다.

자주 쓰는 패턴

가이드

자세히 알아보기

01

1. 정규표현식 기초

정규표현식(Regular Expression, Regex)은 문자열 패턴을 정의하고 검색, 추출, 대체하는 강력한 도구입니다. 문자 그대로 매칭(\d는 숫자, \w는 단어 문자)하거나 특수문자로 복잡한 패턴을 표현합니다. 예: ^[a-z]+$는 소문자만 포함된 문자열을 의미합니다. ^는 시작, $는 끝, [a-z]는 a부터 z, +는 1개 이상을 의미합니다. 거의 모든 프로그래밍 언어와 텍스트 에디터에서 지원하며, 입력 검증, 데이터 파싱, 텍스트 치환에 필수적입니다.

02

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,}$. 이 패턴들을 기본으로 프로젝트에 맞게 수정하여 사용하세요.

03

3. 정규식 플래그 설명

정규표현식 플래그는 검색 동작을 제어합니다. g(global): 첫 매칭만이 아닌 모든 매칭을 찾습니다. i(ignoreCase): 대소문자를 구분하지 않습니다 (/hello/i는 Hello, HELLO 모두 매칭). m(multiline): ^와 $가 각 줄의 시작/끝에 매칭됩니다. s(dotAll): .이 개행문자(\n)도 매칭합니다. u(unicode): 유니코드 전체를 올바르게 처리합니다(이모지 등). y(sticky): lastIndex 위치에서만 검색을 시작합니다. 예: /hello/gi는 대소문자 무시하고 모든 hello를 찾습니다.

04

4. 캡처 그룹과 후방참조

괄호()로 그룹을 만들면 매칭된 부분을 캡처하여 나중에 사용할 수 있습니다. 예: /(\d{4})-(\d{2})-(\d{2})/에서 $1은 연도, $2는 월, $3은 일입니다. JavaScript의 match() 결과 배열에 캡처 그룹이 포함됩니다. 후방참조 \1, \2는 이전 그룹과 같은 텍스트를 매칭합니다. 예: /(\w+)\s+\1/는 "hello hello"를 매칭합니다. 비캡처 그룹 (?:)은 그룹화는 하지만 캡처하지 않아 성능이 좋습니다.

05

5. 전방탐색과 후방탐색

전방탐색(lookahead)과 후방탐색(lookbehind)은 특정 패턴 앞/뒤를 확인하되 매칭에 포함하지 않습니다. 긍정 전방탐색 (?=): /\d(?=px)/는 px 앞의 숫자만 매칭합니다("100px"에서 100). 부정 전방탐색 (?!): /\d(?!px)/는 px 앞이 아닌 숫자만 매칭합니다. 긍정 후방탐색 (?<=): /(?<=\$)\d+/는 $ 뒤의 숫자만 매칭합니다("$100"에서 100). 부정 후방탐색 (?<!): 그 반대입니다. 비밀번호 검증에서 특정 문자 포함 여부 확인에 자주 사용됩니다.

06

6. 정규식 성능 최적화

복잡한 정규표현식은 성능 문제를 일으킬 수 있습니다. 가능한 한 구체적으로 작성하세요(.*보다는 [a-z]+). 불필요한 캡처 그룹은 비캡처 그룹(?:)으로 바꾸세요. 백트래킹을 줄이기 위해 탐욕적 수량자(*,+) 대신 게으른 수량자(*?,+?)를 사용합니다. 큰 텍스트에서는 정규식보다 문자열 메서드(indexOf, startsWith)가 빠를 수 있습니다. 정규식을 미리 컴파일하여 재사용하세요(new RegExp를 반복 생성하지 말 것). ReDoS(Regular Expression Denial of Service) 공격에 주의하여 사용자 입력을 정규식 패턴으로 직접 사용하지 마세요.