정규식 해설
Regex Explainer
정규식을 이름이 붙은 트리로 분해해 각 부분이 무엇을 잡는지 읽을 수 있게 합니다.
정규식을 트리로 쪼개서 각 조각이 무엇을 하는지 설명합니다. 그룹·수량자·문자 클래스·단언을 패턴의 구조 그대로 중첩해 보여 줍니다. 테스터와 같은 화면을 해설 탭에서 연 것입니다. 패턴을 읽는 일과 돌려 보는 일은 같은 활동이기 때문입니다.
패턴
문자열 어디서든 일치 가능, 캡처 그룹 2개.
각 조각이 하는 일
([\w.+-]+)@([\w-]+\.[\w.-]+)차례대로
이것들이 사이에 아무것도 끼지 않은 채 차례로 모두 일치해야 합니다.
([\w.+-]+)1번 캡처 그룹
안쪽 패턴에 일치시키고 그 글자를 기억해 둡니다. `match[1]`로, 치환 문자열에서는 `$1`로 씁니다.
[\w.+-]++만큼 반복
1번 이상 반복하되, 되도록 많이 잡고 뒤쪽이 실패할 때만 내어 줍니다.
[\w.+-]이 집합에 있는 문자 하나
문자 하나에 일치합니다. 아래 것들 중 입력에 먼저 오는 것이 잡힙니다.
클래스 안에서 `.`은 마침표입니다. 여기서는 "아무 문자"라는 뜻이 아니고, 이스케이프해도 달라지지 않습니다.
\w아무 단어 문자
정확히 `[A-Za-z0-9_]`입니다.
ASCII만 해당합니다. 자바스크립트 정규식에서 `é`, `한`, `ß`는 단어 문자가 아니므로 `\w+`는 한글이나 악센트가 붙은 낱말에 일치하지 않습니다.
.“.” (U+002E) 문자 하나
대소문자까지 그대로 맞춥니다.
+“+” (U+002B) 문자 하나
대소문자까지 그대로 맞춥니다.
-“-” (U+002D) 문자 하나
대소문자까지 그대로 맞춥니다.
@“@” (U+0040) 문자 하나
대소문자까지 그대로 맞춥니다.
([\w-]+\.[\w.-]+)2번 캡처 그룹
안쪽 패턴에 일치시키고 그 글자를 기억해 둡니다. `match[2]`로, 치환 문자열에서는 `$2`로 씁니다.
[\w-]+\.[\w.-]+차례대로
이것들이 사이에 아무것도 끼지 않은 채 차례로 모두 일치해야 합니다.
[\w-]++만큼 반복
1번 이상 반복하되, 되도록 많이 잡고 뒤쪽이 실패할 때만 내어 줍니다.
[\w-]이 집합에 있는 문자 하나
문자 하나에 일치합니다. 아래 것들 중 입력에 먼저 오는 것이 잡힙니다.
\w아무 단어 문자
정확히 `[A-Za-z0-9_]`입니다.
ASCII만 해당합니다. 자바스크립트 정규식에서 `é`, `한`, `ß`는 단어 문자가 아니므로 `\w+`는 한글이나 악센트가 붙은 낱말에 일치하지 않습니다.
-“-” (U+002D) 문자 하나
대소문자까지 그대로 맞춥니다.
\.“.” (U+002E) 문자 하나
대소문자까지 그대로 맞춥니다.
여기서는 백슬래시가 필요 없습니다. 이 자리에서 이 문자는 특별한 뜻을 갖지 않습니다.
[\w.-]++만큼 반복
1번 이상 반복하되, 되도록 많이 잡고 뒤쪽이 실패할 때만 내어 줍니다.
[\w.-]이 집합에 있는 문자 하나
문자 하나에 일치합니다. 아래 것들 중 입력에 먼저 오는 것이 잡힙니다.
클래스 안에서 `.`은 마침표입니다. 여기서는 "아무 문자"라는 뜻이 아니고, 이스케이프해도 달라지지 않습니다.
\w아무 단어 문자
정확히 `[A-Za-z0-9_]`입니다.
ASCII만 해당합니다. 자바스크립트 정규식에서 `é`, `한`, `ß`는 단어 문자가 아니므로 `\w+`는 한글이나 악센트가 붙은 낱말에 일치하지 않습니다.
.“.” (U+002E) 문자 하나
대소문자까지 그대로 맞춥니다.
-“-” (U+002D) 문자 하나
대소문자까지 그대로 맞춥니다.
플래그
- g —
global - 첫 일치에서 멈추지 않고 모두 찾습니다. 대신 `.test()`와 `.exec()`가 호출 사이에 `lastIndex`를 옮기는데, "한 번 걸러 한 번씩 실패한다"는 증상은 대개 이것 때문입니다.
사용 방법
물려받은 패턴을 붙여넣습니다
설정 파일에 있는데 아무도 쓴 기억이 없는 그 패턴이죠. 문자열 비교가 아니라 파싱으로 읽어서, 분석이 실제 구조를 따릅니다.
트리를 따라 내려갑니다
노드마다 원문 조각과 그것이 무엇인지, 무슨 일을 하는지가 나옵니다. 사람들이 자주 놀라는 부분 — 중첩된 수량자, 굳이 캡처할 필요 없는데 캡처하는 그룹 — 에는 따로 표시가 붙습니다.
테스트로 바꿔 이해가 맞는지 확인합니다
패턴은 그대로 유지됩니다. 정규식을 이해하는 것과 생각대로 동작하는지 확인하는 것은 다른 단계이고, 둘 중 싼 쪽은 두 번째입니다.
자주 묻는 질문
중첩된 수량자에 붙는 경고는 무슨 뜻인가요?
`(a+)+` 같은 형태는 같은 문자열을 나누는 방법을 엔진에 기하급수적으로 많이 주기 때문에, 매치되지 않는 입력 하나가 우주의 나이보다 오래 걸릴 수 있습니다. 정규식 서비스 거부 공격 대부분의 뒷모습입니다.
캡처 그룹이라고 왜 알려 주나요?
쓰지 않는 캡처 그룹이 자리를 차지하고, 실제로 쓰는 그룹의 번호를 밀어 버리기 때문입니다. `(?:…)`는 캡처하지 않고 묶어서, `$1`이 의도한 것을 계속 가리키게 합니다.
플래그도 설명해 주나요?
별도 칸에서 설명합니다. 켜 둔 플래그마다 이름과 무엇을 바꾸는지가 나옵니다. 특히 `m`과 `s`는 읽어 볼 만합니다. 이름만 보면 서로의 동작으로 오해하기 쉽습니다.
이 도구로 이어지는 것
정규식 테스터
Regex Tester
정규식을 예시 텍스트에 적용해 일치 부분을 실시간으로 강조하고 캡처 그룹을 보여 줍니다.
JSON 정렬·검사
JSON Formatter & Validator
JSON을 보기 좋게 정렬하거나 압축하고, 문법 오류가 난 줄과 열을 정확히 짚어 줍니다.
YAML 정렬·검사
YAML Formatter & Validator
YAML 들여쓰기를 통일하고 문법을 검사하며, 파서를 깨뜨리는 탭·앵커 실수를 표시합니다.
TOML 정렬·검사
TOML Formatter & Validator
TOML을 정렬하고 검사하며 테이블 순서와 인라인 표기 방식을 통일합니다.
다음 단계
이 도구의 결과를 그대로 받을 수 있는 도구들입니다.
찾아 바꾸기
Find & Replace
문자열·단어·정규식으로 치환하며 캡처 그룹을 쓰고 바뀔 부분을 미리 보여 줍니다.
정규식 테스터
Regex Tester
정규식을 예시 텍스트에 적용해 일치 부분을 실시간으로 강조하고 캡처 그룹을 보여 줍니다.
패턴 추출
Pattern Extractor
텍스트 덩어리에서 이메일·URL·숫자·날짜나 직접 지정한 정규식과 맞는 부분을 모두 목록으로 뽑습니다.
Base64 인코딩·디코딩
Base64 Encoder & Decoder
텍스트와 파일을 Base64·Base64URL로 인코딩·디코딩하며 UTF-8을 올바르게 처리합니다.
curl 코드 변환
curl to Code
curl 명령을 fetch·axios·파이썬 requests·Go·PHP·PowerShell 코드로 변환합니다.
텍스트 해시 생성
Text Hash
문자열의 MD5·SHA-1·SHA-256·SHA-384·SHA-512·CRC-32를 계산하고 대문자·Base64 출력도 지원합니다.