정규식 테스터

정규식을 실시간 테스트 — 플래그 7종, 매치·그룹 위치, 패턴 설명, 테스트 케이스, 공유 링크, 8개 언어 코드 생성까지. 무료, 브라우저 처리.

이 패턴이 하는 일
\b단어 경계
\w+1번 이상 반복
\w영문자·숫자·밑줄 하나
@"@" 라는 글자 그대로
\w+1번 이상 반복
\w영문자·숫자·밑줄 하나
\."." 문자
\w+1번 이상 반복
\w영문자·숫자·밑줄 하나
\b단어 경계
빠른 참조
문자 클래스
\d숫자 0–9
\w단어 문자 (a–z 0–9 _)
\s공백
.임의 문자
[abc]a, b 또는 c
[^abc]a/b/c 제외
앵커
^문자열/줄 시작
$문자열/줄 끝
\b단어 경계
수량자
*0개 이상
+1개 이상
?0개 또는 1개
{n}정확히 n개
{n,}n개 이상
{n,m}n~m개
*?게으른(최소)
그룹
(…)캡처 그룹
(?:…)비캡처
(?<name>…)이름 있는 그룹
\1역참조
a|ba 또는 b
플래그
g전역
i대소문자 무시
m여러 줄
sdotall
u유니코드
ysticky

2개 일치

문의는 hi@example.com 또는 team@site.org으로 보내주세요.

#1 hi@example.com (위치 4–18)

#2 team@site.org (위치 22–35)

추출된 매치
결과
테스트 케이스

한 줄에 문자열 하나. 매치되면 안 되는 줄은 "- ", 매치돼야 하는 줄은 "+ "로 시작하세요.

이 패턴을 코드로 쓰기
import re

pattern = re.compile(r"\b\w+@\w+\.\w+\b")
matches = pattern.findall(text)

🔒 브라우저의 기본 정규식 엔진으로 처리되며 텍스트는 업로드되지 않습니다.

정규식 실시간 테스트

패턴과 테스트 텍스트를 입력하면 모든 매치가 즉시 하이라이트되고, 캡처 그룹은 텍스트 안에서 색으로 구분되며 어느 색이 몇 번 그룹인지 범례가 붙습니다. 그 아래에는 매치마다 값과 시작–끝 위치, 각 그룹의 값과 위치, (?<name>…)로 붙인 이름 있는 그룹까지 번호를 매겨 나열합니다 — 캡처 그룹이 하나도 없는 패턴이어도 목록은 그대로 나옵니다. 플래그는 JavaScript의 7가지가 모두 스위치입니다: g, i, m, s, u, v(유니코드 세트), y(sticky). g를 끄면 실제로 첫 매치 하나에서 멈춥니다. 잘못된 패턴은 조용히 실패하지 않고 엔진이 준 메시지와 함께 오류를 보여 주며, 중첩 수량자 때문에 백트래킹이 지수적으로 늘어날 수 있는 패턴은 실행 전에 거절해 탭이 멈추지 않게 합니다.

이 패턴이 하는 일 패널은 패턴을 구성 요소 단위로 한 줄씩, 중첩된 만큼 들여써서 되읽어 줍니다. 각 줄에는 해당 토큰과 캡처 그룹 1, 1번 이상 반복 같은 설명이 나란히 붙습니다. 다이어그램이 아니라 문장이고, 영어를 옮긴 것이 아니라 한국어로 쓰인 설명입니다. 빠른 참조 패널에는 자주 쓰는 문법이 접힌 채로 들어 있습니다.

매치 아래로는 $1 그룹 참조가 되는 실시간 치환 미리보기, 전체 매치·번호 그룹·이름 있는 그룹 중 하나를 골라 모든 매치에서 한꺼번에 뽑아내는 추출 상자(.txt 한 줄에 하나, .csv index·match와 캡처 그룹별 열을 RFC 방식 따옴표로, .json 위치와 이름 있는 그룹까지 — 로 내려받기), 한 줄에 하나씩 적어 통과·실패를 채점하는 테스트 케이스 패널(- 로 시작하면 매치되면 안 되는 줄), 그리고 이 패턴을 코드로 쓰기가 있습니다. 코드 생성은 JavaScript·Python·Java·C#·Go·PHP·Ruby·Rust 8개 언어를 지원하고, 각 언어가 정규식을 감싸는 문자열 표기 규칙에 맞춰 그대로 내보내며, 엔진이 다른 지점은 경고로 짚어 줍니다: Go·Rust는 RE2라 전방·후방 탐색과 역참조가 없고, Python은 이름 있는 그룹을 (?P<name>…)으로 쓰며, Ruby의 /m은 여기서의 s에 해당합니다.

링크 복사는 패턴·플래그·테스트 문자열·치환 문자열을 주소에 담아, 받는 쪽이 지금 보고 있는 화면 그대로 열게 합니다. 링크로 감당하기엔 너무 긴 상태는 잘린 링크를 주는 대신 이유를 문장으로 알려 주고 거절합니다. 일치 예시 추가는 패턴에 실제로 매치되는 문자열을 만들어 테스트 문자열 끝에 덧붙이며 — 보고 있던 내용을 지우지 않습니다 — 보여 주기 전에 진짜 엔진으로 매치되는지 확인합니다. 텍스트는 붙여넣거나 5 MB까지의 텍스트 파일로 열 수 있습니다. 매칭은 브라우저의 기본 정규식 엔진(JavaScript 방식)으로 이뤄져 텍스트가 기기를 벗어나지 않고, 아주 큰 입력은 안전을 위해 처음 100,000자까지만 다룬다는 안내가 뜹니다.

자주 묻는 질문

어떤 정규식 방식인가요?

매칭 엔진은 브라우저에 내장된 JavaScript 정규식 하나뿐입니다 — Node.js와 모든 브라우저가 쓰는 그 엔진이고, PCRE나 Python, RE2 엔진을 따로 싣지는 않습니다. 대신 작성한 패턴을 JavaScript·Python·Java·C#·Go·PHP·Ruby·Rust 8개 언어 코드로 뽑아 주고, 엔진이 다른 지점은 경고 문장으로 짚어 줍니다. Go·Rust는 RE2라 전방·후방 탐색과 역참조를 받지 않고, Python은 이름 있는 그룹을 (?P<name>…)으로 쓰며, Ruby의 /m은 여기서의 s(dotall)에 해당하고, sticky(y)와 유니코드 세트(v)는 JavaScript 전용입니다.

캡처 그룹도 볼 수 있나요?

네, 여러 방식으로 볼 수 있습니다. 하이라이트된 텍스트 안에서 캡처 그룹마다 색을 달리 칠하고 어느 색이 몇 번 그룹인지 범례로 보여 줍니다. 그 아래 매치 목록에는 매치의 시작–끝 위치와 각 그룹의 값·시작–끝 위치, (?<name>…)으로 붙인 이름 있는 그룹까지 함께 나옵니다. 추출 상자에서는 전체 매치·번호 그룹·이름 있는 그룹 중 하나를 골라 모든 매치에서 한꺼번에 뽑아낼 수 있고, 캡처 그룹이 없는 패턴이어도 매치 목록은 그대로 표시됩니다.

찾아 바꾸기도 되나요?

네. 치환 문자열($1, $2 그룹 참조 사용)을 입력하면 바뀐 결과가 실시간으로 갱신되어 복사할 수 있습니다.

텍스트가 업로드되나요?

아니요. 매칭은 전부 브라우저에서 이뤄집니다.

지금 보고 있는 화면을 링크로 공유할 수 있나요?

네. "링크 복사"를 누르면 패턴·플래그·테스트 문자열·치환 문자열이 주소(?p=&f=&t=&r=)에 담기고, 그 링크를 열면 도구가 그대로 채워집니다. 다만 링크가 8,000자를 넘게 되면 — 메신저·메일 클라이언트·단축 서비스가 그 이상은 안전하게 전달하지 못합니다 — 잘린 링크를 주는 대신 왜 못 만드는지 문장으로 알려 주고 거절합니다. 링크에 담긴 플래그가 올바른 조합이 아닐 때도 그 사실을 알려 주고 페이지의 플래그는 건드리지 않습니다.

패턴이 무슨 뜻인지 풀어 주나요?

네. "이 패턴이 하는 일" 패널이 패턴을 구성 요소 단위로 쪼개, 중첩된 만큼 들여쓴 한 줄씩으로 보여 줍니다. 각 줄에는 그 줄이 설명하는 토큰과 "캡처 그룹 1", "숫자 0–9 하나", "1번 이상 반복", "바로 뒤가 이것일 때만" 같은 설명이 나란히 붙습니다. 철도 다이어그램이 아니라 문장으로 된 설명입니다.

여러 문자열을 한꺼번에 검사할 수 있나요?

네. "테스트 케이스"를 열고 한 줄에 문자열 하나씩 적으면 됩니다. 그냥 적은 줄(또는 "+ "로 시작하는 줄)은 매치돼야 하는 케이스, "- "로 시작하는 줄은 매치되면 안 되는 케이스입니다. 줄마다 ✓ 또는 ✗와 무엇을 요구한 것인지가 표시되고 "4개 중 3개 통과"처럼 점수가 나옵니다. 케이스 검사는 "이 문자열 안에서 패턴이 뭔가 찾아내는가"를 묻는 것이라 g·y 플래그는 빼고 실행합니다.

매치 결과를 파일로 내려받을 수 있나요?

네. 형식을 고르고 "매치 내려받기"를 누르면 됩니다. .txt는 한 줄에 매치 하나, .csv는 index·match와 캡처 그룹별 열(쉼표나 따옴표가 들어간 매치도 살아남도록 RFC 방식으로 따옴표 처리), .json은 매치의 위치와 각 그룹의 start·end, 이름 있는 그룹까지 담습니다. 화면의 매치 상세 목록은 큰 입력에서 페이지가 멈추지 않도록 200개에서 끊지만, 내려받기와 추출 상자, 하이라이트에는 모든 매치가 들어갑니다.

패턴을 실행하지 않고 거절하는 이유가 뭔가요?

텍스트가 길어서가 아니라 패턴의 구조 때문입니다. (a+)+ 같은 중첩 수량자는 백트래킹이 지수적으로 늘어날 수 있는데, 그런 패턴은 exec() 한 번에 탭이 멈춰 버려 중간에 끊을 방법이 없습니다. 그래서 실행 전에 구조를 분석해 거절합니다. u와 v 플래그를 동시에 켠 경우도 엔진의 영어 메시지 대신 도구가 직접 한국어로 알려 주고 멈춥니다.

패턴에 맞는 예시 문자열을 만들어 주나요?

네. "일치 예시 추가"를 누르면 패턴에 실제로 매치되는 문자열을 만들어 테스트 문자열 끝에 덧붙입니다 — 보고 있던 내용을 지우지 않고, 다시 누르면 다른 예시가 나옵니다. 만든 문자열은 보여 주기 전에 진짜 엔진으로 매치되는지 확인하므로 항상 매치됩니다. 전방·후방 탐색, \B, \p{L} 같은 유니코드 속성처럼 "무엇인가"가 아니라 "어디인가"를 말하는 패턴은 아무 문자열도 만들지 않고 그 이유를 알려 줍니다.