이메일 형태 단순 매칭
^[\w.+-]+@[\w-]+\.[\w.-]+$learner@coddy.tech
something@something.something이라는 기본 형태를 잡아냅니다. 실제 이메일 형식은 이보다 훨씬 관대하기 때문에, 폼 검증이라면 type="email" 속성과 서버 측 확인을 함께 쓰는 편이 좋습니다.
애니메이션 매치 강조로 정규식을 테스트하세요.
마지막 업데이트
Coddy는 브라우저에서 실제 코드를 작성하며 배웁니다. 인터랙티브 레슨, 즉각적인 피드백, 막힐 때 도와주는 AI까지.
정규식 테스터는 정규표현식을 입력하면 샘플 텍스트에서 무엇이 매칭되는지 즉시 보여주는 도구입니다. 개발자는 정규식(regex)을 사용해 입력값을 검증하거나, 문자열에서 데이터를 추출하고, 로그를 검색하고, 텍스트를 정제하고, 에디터 매크로를 만들거나, 찾기/바꾸기 규칙을 작성합니다.
정규식은 처음 보면 암호처럼 느껴집니다. 몇 글자 안 되는 기호에 의미가 너무 많이 담겨 있기 때문입니다. 실시간 테스터는 이 장벽을 단숨에 낮춰줍니다. 한 글자 입력할 때마다 매칭 결과와 캡처 그룹이 갱신되니, 원하는 동작이 나올 때까지 마음껏 실험할 수 있습니다.
언어마다 정규식 엔진이 조금씩 다릅니다(JavaScript, PCRE, Python, Java, Go, .NET). 다만 기본기 - 문자, 문자 클래스, 수량자, 앵커, 그룹 - 는 어디서나 똑같이 동작합니다. lookbehind, 명명 그룹, 점유 수량자(possessive quantifier) 같은 고급 기능에서 엔진별 차이가 드러나죠.
\d+는 연속된 숫자를 매칭하지만, 그 숫자가 말이 되는 값인지는 알지 못합니다.g는 모든 매칭을 찾고, i는 대소문자를 무시하며, m은 ^와 $가 줄 단위로 동작하게 하고, s는 .이 개행 문자에도 매칭되도록 만듭니다.(...)은 단순히 전체 문자열의 매칭 여부만 확인하는 게 아니라, 매칭된 일부를 따로 뽑아낼 수 있게 해줍니다. 파싱에서는 사실상 필수입니다.?를 붙이면 *게으른(lazy)* 모드가 되어 가능한 한 적게 매칭합니다.패턴 입력란에 정규표현식을 작성합니다. 양옆의 / 슬래시는 빼고 입력하세요 - 그건 자바스크립트 리터럴 문법일 뿐, 패턴 자체에 포함되지 않습니다.
보통은 g(전체 매칭)와 i(대소문자 무시)를 가장 자주 씁니다. 줄 단위 앵커가 필요하면 m, .이 개행에도 매칭되게 하려면 s를 켜세요.
샘플 텍스트를 테스트 영역에 붙여 넣으세요. 입력하는 동안 매칭 부분이 하이라이트되고, 캡처 그룹은 매칭 목록 아래에 함께 표시됩니다.
각 매칭 항목에는 위치, 매칭된 전체 문자열, 그리고 캡처된 그룹이 표시됩니다. 원하는 건 잡고, 원하지 않는 건 거르는지 이걸로 확인하세요.
수량자를 좁히고, 앵커(^, $)를 추가하고, 리터럴로 쓸 특수 문자(\., \?)를 이스케이프하면서 코드가 필요로 하는 정확한 매칭과 그룹이 나올 때까지 조정합니다.
실무에서 99% 시간을 차지하는 정규식 80%만 모았습니다. 북마크해 두면 문법을 가장 빠르게 떠올릴 수 있습니다. 전체 문법은 MDN 정규표현식 가이드를 참고하세요.
| 토큰 | 의미 | 예시 |
|---|---|---|
. | 임의의 한 글자(개행 제외) | a.c는 abc, a-c에 매칭 |
\d \D | 숫자 / 숫자가 아닌 문자 | \d+는 123에 매칭 |
\w \W | 단어 문자(글자/숫자/_) / 단어가 아닌 문자 | \w+는 hello_1에 매칭 |
\s \S | 공백 / 공백이 아닌 문자 | \s+는 스페이스, 탭에 매칭 |
[abc] | a, b, c 중 하나 | [aeiou]는 모음 한 글자 |
[^abc] | a, b, c가 아닌 문자 | [^0-9]는 숫자가 아닌 문자 |
* + ? | 앞 문자 0개 이상 / 1개 이상 / 0개 또는 1개 | a+는 a, aaa에 매칭 |
{n} {n,m} | 정확히 n번 / n번에서 m번 | \d{3,5}는 3~5자리 숫자 |
^ $ | 문자열 시작 / 끝(m 플래그가 있으면 줄 단위) | ^Error는 줄이 Error로 시작 |
(...) | 캡처 그룹 | (\d+)는 숫자를 캡처 |
(?:...) | 비캡처 그룹 | (?:foo|bar)는 캡처 없이 묶기 |
a|b | 선택(alternation) - a 또는 b | yes|no |
\b | 단어 경계 | \bcat\b는 cat에 매칭, cats에는 비매칭 |
^[\w.+-]+@[\w-]+\.[\w.-]+$learner@coddy.tech
something@something.something이라는 기본 형태를 잡아냅니다. 실제 이메일 형식은 이보다 훨씬 관대하기 때문에, 폼 검증이라면 type="email" 속성과 서버 측 확인을 함께 쓰는 편이 좋습니다.
\d+Lesson 12 has 3 tasks and 2 quizzes.
g 플래그를 켜면 연속된 숫자 모두를 찾습니다 - 12, 3, 2. \d+는 정규식으로 "숫자 한 자 이상"을 의미합니다.
/users/(\d+)/users/42/profile
전체 매칭은 /users/42이고, 캡처 그룹 (\d+)이 42만 따로 추출합니다. 코드에서 정규식 매칭 결과를 *실제로* 쓰려면 캡처 그룹이 핵심입니다.
<.+><.+?><b>hello</b>
탐욕적인 버전은 .+이 가능한 만큼 욕심껏 잡아먹어서 <b>hello</b> 전체에 매칭됩니다. 반면 게으른 버전(+?)은 처음 만나는 >에서 멈추기 때문에 <b>와 </b>만 각각 매칭합니다.
., ?, +, (, ), [, ], {, }, \, ^, $, |. 이 문자를 글자 그대로 쓰고 싶다면 앞에 \를 붙이세요..*를 탐욕적으로 사용해 의도보다 훨씬 많은 부분이 매칭되는 경우 - .*?로 바꾸거나, 더 구체적인 문자 클래스를 쓰세요.g 플래그를 빼먹고 "왜 첫 번째 매칭만 보이지?" 하고 의아해하는 경우.\d, \w, [abc])와 수량자(*, +, ?, {n,m})로 바꿔 나갑니다. 정규식 테스터로 원하는 케이스가 정확히 매칭될 때까지 반복적으로 다듬으세요.\w는 무슨 뜻인가요?\w는 단어 문자(word character)에 매칭됩니다 - 글자, 숫자, 또는 언더스코어(_)요. \W는 그 반대로, 단어 문자가 아닌 모든 문자를 가리킵니다. 정확한 범위는 엔진과 Unicode 플래그 설정에 따라 달라집니다..*는 가능한 한 많이 매칭하려 합니다. 게으른 수량자(.*?)로 바꾸거나, 더 구체적인 문자 클래스를 써서 원하는 지점에서 멈추게 하세요.re, Java, Go, .NET은 지원하는 플래그와 고급 기능(lookbehind 지원, 명명 그룹, 점유 수량자 등)이 조금씩 다릅니다.