RegexSmith
정규식을 작성한 바로 그 자리에서 설명하고 테스트합니다. C#에서 패턴에 마우스를 올리면 각 부분이 쉬운 말로 한 줄씩, 그룹은 색으로, 일치하는 문자열과 함께 표시됩니다. 멈출 수 있는 패턴에는 밑줄이 그어집니다. RegexSmith 테스터에서 직접 만든 샘플로 시험해 보고 클릭 한 번으로 패턴을 코드에 다시 쓸 수 있습니다.
무료 · Visual Studio 2022 및 2026 · UI 14개 언어 · 원격 분석 없음
RegexSmith를 쓰는 이유
![[GeneratedRegex] 패턴 위의 호버 카드: 그룹이 색으로 구분된 패턴, 각 부분을 쉬운 말로 설명하는 줄, 일치하는 샘플과 일치하지 않는 샘플 하나, 그리고 상태 ✓ 안전](../../regexsmith/marketplace/hero.png)
문법 강의가 아닌 쉬운 말
^(?<year>\d{4})-(?<id>\d{1,5})$는 ‘텍스트의 시작’, ‘숫자 정확히 4개’, ‘숫자 1~5개’가 됩니다 — 부분마다 한 줄씩, 속한 그룹 아래에 중첩되며, 그룹마다 고유한 색이 있습니다.
실제 엔진으로 확인
카드의 샘플과 테스터의 모든 결과는 호출의 옵션을 그대로 사용해 .NET 정규식 엔진 자체에서 나옵니다. 보이는 그대로 앱이 동작합니다.
멈출 수 있는 패턴
([a-z0-9]+\.?)+는 무해해 보이지만, 거의 일치하는 긴 문자열에서 요청을 멈추게 할 수 있습니다. RegexSmith는 이런 반복에 밑줄을 긋고 Ctrl+.로 수정합니다.
조건 없는 무료
구독, ‘Pro’ 버전, 데이터 수집이 없고 출력 창이나 시작 시 메시지도 없습니다. 패턴과 샘플은 사용자의 컴퓨터에 남습니다. 부탁드리는 것은 단 하나, 어느 정도 사용해 보신 뒤 Marketplace에 평가를 남겨 주시는 것뿐입니다. Visual Studio 2022 및 2026, x64 및 ARM64에서 작동합니다.
기능
- C# 패턴 위의 호버 카드: 그룹이 색으로 구분된 패턴, 각 부분을 쉬운 말로 설명하는 줄, 색이 있는 그룹 태그와 상태 — ✓ 안전, ⚠ 중단될 수 있음 또는 ✕ 잘못됨.
- 그룹 밑줄: 코드 안의 각 캡처 그룹 아래에 그룹 색의 가는 선이 그어집니다. 중첩된 그룹은 더 아래에 표시됩니다.
- 패턴으로 만든 샘플 — 일치하는 문자열 2개와 일치하지 않는 문자열 1개 — 를 실제 .NET 엔진으로 확인합니다.
- RX001: 지수 시간이 걸릴 수 있는 반복 아래에 물결선을 표시하고, Ctrl+.에서 수정과 변경 전후 미리 보기를 제공합니다.
- 찾기 결과 옆에 도킹되는 RegexSmith 테스터: ✓/✗ 기대값이 있는 샘플, 강조 표시되는 일치와 그룹, 그룹 표, 바꾸기 탭.
- 코드에 적용: 편집한 패턴을 옵션과 함께 같은 종류의 문자열 리터럴로 되돌려 쓰며, 실행 취소 한 번으로 되돌릴 수 있습니다.
- xUnit, NUnit, MSTest용 단위 테스트로 복사 — 샘플이 테스트 케이스가 됩니다.
호버 카드
패턴 문자열에 마우스를 올리면 Visual Studio의 일반 도구 설명에 RegexSmith 카드가 추가됩니다. 패턴의 의미, 무엇과 일치하는지, 안전한지를 알려 줍니다.

작동하는 위치
C# 파일에서 다음의 패턴 위:
RegexOptions유무와 관계없이new Regex("…");- 정적 메서드
Regex.IsMatch,Match,Matches,Replace,Split,Count; [GeneratedRegex("…")];[RegularExpression("…")]— 이 경우 카드에 유효성 검사: 값 전체가 일치해야 함이라고 표시됩니다;- 이들 중 하나가 사용하는 같은 파일의
const string.
일반 문자열, 축자 문자열(@"…"), 원시 문자열("""…""")은 컴파일러와 같은 방식으로 읽히므로 "\\d"와 @"\d"는 같은 패턴입니다.
카드에 표시되는 내용
| 화면 표시 | 의미 |
|---|---|
| RegexSmith · .NET 정규식 · IgnoreCase | 패턴의 종류와 호출에서 읽은 옵션, 그리고 오른쪽에 상태. |
| 패턴 | 각 캡처 그룹의 괄호는 그 색으로, 안쪽은 그 색의 밑줄로 표시됩니다. 텍스트는 테마 색을 유지하므로 읽기 쉽습니다. |
| 숫자 정확히 4개 | 부분마다 쉬운 말로 한 줄 — ‘텍스트의 시작’, ‘다음 텍스트 중 하나: “jpg”, “png”’, ‘숫자 1~5개’ — 속한 그룹 아래에 중첩됩니다. 아주 긴 패턴은 … N개 더로 끝납니다. |
| 그룹 태그 | 각 그룹의 이름이나 번호를 그 색의 태그로 표시합니다 — 패턴과 코드 아래의 색과 같습니다. |
| ✓ 일치: … ✗ 불일치: … | 일치하는 문자열 2개와 일치하지 않는 문자열 1개로, 패턴으로 만들어 실제 .NET 엔진으로 확인합니다. 공백은 흐린 점으로 표시됩니다. |
| ▶ 패턴 테스트… | RegexSmith 테스터에서 패턴을 엽니다. |
상태
| 화면 표시 | 의미 |
|---|---|
| ✓ 안전 | .NET이 패턴을 허용하고, 그 안에 치명적인 역추적을 일으킬 수 있는 부분이 없습니다. |
| ⚠ 중단될 수 있음 | 거의 일치하는 긴 입력에서 어떤 반복이 지수 시간이 걸릴 수 있습니다. 카드에 그 종류(RX001)와 Ctrl+.에서 수정을 제공한다는 내용이 표시됩니다. |
| ✕ 잘못됨 | 엔진이 패턴을 거부합니다. 카드에 엔진의 메시지가 표시됩니다: .NET에서 이 패턴을 허용하지 않습니다: … |
‘안전’은 딱 그 의미뿐입니다: .NET이 패턴을 허용하고 멈출 수 없다는 것. 의도한 대상과 일치한다는 뜻은 아닙니다 — 그것을 확인하는 것이 샘플과 테스터입니다.
그룹 밑줄
패턴의 모든 캡처 그룹에 코드 안에서 바로 그 색의 가는 선이 그어집니다 — 카드와 같은 색입니다. 그룹이 다섯 개인 긴 패턴도 한눈에 읽힙니다: 어느 부분이 연도이고 어느 부분이 ID인지.
다른 그룹 안의 그룹은 조금 더 아래에 표시되므로 두 선이 모두 보입니다. 색은 연어색, 초록, 파랑, 보라, 호박색, 청록 순서로 반복됩니다.
밑줄은 설정에서 끌 수 있습니다: 캡처 그룹에 밑줄 표시.
멈출 수 있는 패턴
어떤 패턴은 거의 일치하는 긴 문자열에서 지수 시간이 걸립니다 — 정규식이 웹 요청을 멈추게 하는 전형적인 경우입니다. RegexSmith는 이런 패턴을 형태로 찾아내 반복 아래에 경고 물결선을 표시합니다. 마우스를 올리면 이유가 나옵니다.
![([a-z0-9]+\.?)+ 아래의 RX001 물결선, 열린 Ctrl+. 메뉴, 수정 미리 보기: 취소선이 그어진 이전 패턴과 원자 그룹을 사용한 새 패턴](../../regexsmith/marketplace/backtracking.png)
밑줄이 그어지는 대상(RX001)
- 중첩된 반복:
(a+)+,([a-z0-9]+\.?)+— 같은 문자들의 연속을 안쪽 반복과 바깥쪽 반복 사이에서 매우 많은 방법으로 나눌 수 있습니다. - 같은 문자와 일치하는 대안의 반복:
(\w|\d)+— 숫자는 어느 분기로도 잡힐 수 있으므로 숫자 하나마다 작업량이 두 배가 됩니다.
원자 그룹이나 전방·후방 탐색 안에서는 해당하지 않으며, RegexOptions.NonBacktracking에서는 절대 표시되지 않습니다 — 그곳에서는 일어날 수 없기 때문입니다.
Ctrl+.의 수정
캐럿을 물결선에 두고 Ctrl+.를 누르세요 — 각 수정에 미리 보기가 표시됩니다: 변경 전(취소선)과 변경 후의 패턴.
| 수정 | 하는 일 |
|---|---|
| 내부 반복을 원자성으로 만들기: (?>…) | 내부 반복을 (?>…)로 감쌉니다. 일치하는 문자열은 같고, 반복을 여러 방식으로 나눌 수 없게 됩니다. |
| RegexOptions.NonBacktracking 사용 (.NET 7+) | 호출에 옵션을 추가합니다. 모든 입력에서 선형 시간이며 .NET 7 이상이 필요합니다. 패턴이 허용할 때만 제공됩니다 — 역참조, 전방·후방 탐색, 원자 그룹이나 균형 그룹, 조건식이 없어야 합니다. |
| RegexSmith에서 이 패턴 테스트 | 테스터에서 패턴을 엽니다 — 위험한 패턴뿐 아니라 모든 패턴 위에서 제공됩니다. |
RX001은 설정(편집기 힌트)이나 도구 설명의 이 종류의 힌트 표시 안 함으로 끌 수 있습니다. Ctrl+. 수정은 그대로 남습니다.
테스터
RegexSmith 테스터는 찾기 결과 옆에 도킹되어 열립니다. 패턴은 코드에서 가져오며 코드와 연결된 상태로 유지됩니다: 직접 만든 샘플로 시험하고, 바꾸고, 다시 쓰세요.

여는 방법
- 호버 카드의 ▶ 패턴 테스트…;
- 패턴에서 Ctrl+. › RegexSmith에서 이 패턴 테스트;
- C# 파일에서 마우스 오른쪽 클릭 › 정규식 패턴 테스트;
- 보기 › 다른 창 › RegexSmith 테스터 — 코드와 연결되지 않은, 패턴을 시험해 보는 공간입니다.
패턴과 옵션
맨 위에는 패턴의 파일과 줄이 있으며, 클릭하면 그곳으로 이동합니다. 그 아래에는 패턴 상자, 상태 줄(✓ 안전, ⚠ 중단될 수 있음 또는 엔진 오류, 이어서 M개 중 N개 예상대로 · ms), 옵션 칩이 있습니다: IgnoreCase, Multiline, Singleline, IgnorePatternWhitespace, ExplicitCapture, RightToLeft, CultureInvariant. 변경할 때마다 즉시 다시 실행됩니다.
샘플과 기대값
처음에는 카드의 샘플이 들어 있습니다: 일치해야 하는 것 2개와 일치하지 않아야 하는 것 1개. 새 샘플은 샘플을 추가하고 Enter 키를 누르세요…에 입력합니다. 샘플을 클릭하면 편집할 수 있고, ✕를 누르면 제거됩니다. 각 샘플 앞의 표시는 그 샘플이 어떻게 되어야 하는지 나타내며, 클릭해서 바꿀 수 있습니다:
| 화면 표시 | 의미 |
|---|---|
| ✓ | 일치해야 함 |
| ✗ | 일치하지 않아야 함 |
| – | 기대값 없음, 표시만 |
반대로 동작하는 샘플은 빨간색이 됩니다 — ✗ 일치 또는 ✗ 불일치 — 이렇게 샘플은 패턴의 작은 명세가 됩니다. 일치 부분은 색으로 칠해지고, 그룹은 각 색으로 밑줄이 그어지며, 공백은 점으로 표시됩니다. 1초를 넘는 실행은 ⏱ 너무 느림으로 중단됩니다.
선택한 샘플의 그룹에는 선택한 샘플의 모든 일치가 나열됩니다: 전체 일치, 그다음 각 그룹의 값과 위치(참여하지 않은 경우 캡처되지 않음).
바꾸기
바꾸기 탭에는 대체 문자열 상자가 추가되고 — $1, ${name}, $는 $$ — Regex.Replace와 같은 방식으로 각 샘플의 결과가 표시됩니다.
복사, 되돌리기, 적용
단위 테스트로 복사는 샘플을 담은 xUnit, NUnit 또는 MSTest용 테스트를 클립보드에 복사합니다 — 명세가 테스트 프로젝트로 옮겨 갑니다.
되돌리기는 코드의 패턴과 옵션으로 돌아갑니다. 샘플은 그대로 남습니다.
코드에 적용은 패턴을 원래와 같은 종류의 리터럴(일반, 축자, 원시)로 옵션과 함께 다시 씁니다 — 실행 취소 한 번으로 되돌릴 수 있습니다. 테스터가 연 뒤에 그 코드가 바뀌었다면 아무것도 쓰지 않습니다: 패턴에서 테스터를 다시 여세요.
샘플은 패턴별, 솔루션별로 %LocalAppData%\RegexSmith\samples에 기억되므로 다음에도 그대로 있습니다. 리포지토리에는 아무것도 들어가지 않습니다.
설정
도구 › 옵션 › SmithWorks › RegexSmith. 모든 옵션에 하는 일을 알려 주는 짧은 설명이 있습니다.
| 옵션 | 기본값 |
|---|---|
| 마우스를 올리면 패턴 설명 | 켜짐 |
| 캡처 그룹에 밑줄 표시 | 켜짐 |
| RX001 치명적인 역추적 | 켜짐 |
| Marketplace 평가 요청 | 켜짐 |
아래쪽에는 기본값으로 다시 설정, 설명서, Marketplace에서 평가, 피드백 보내기가 있습니다.
설정은 %LocalAppData%\RegexSmith에 저장됩니다.

자주 묻는 질문
RegexSmith가 데이터를 보내나요?
아니요. 패턴은 열려 있는 문서에서 읽어 사용자의 컴퓨터에서 실행되며, 샘플은 %LocalAppData%\RegexSmith에 보관됩니다. 네트워크 요청도, 원격 분석도 없습니다.
카드에 ‘✓ 안전’이라고 나옵니다. 패턴이 맞는 건가요?
꼭 그렇지는 않습니다. ‘안전’은 .NET이 패턴을 허용하고 그 안의 어떤 반복도 치명적인 역추적을 일으킬 수 없다는 뜻입니다. 의도한 대상과 일치하는지는 샘플이 보여 줘야 합니다: 테스터에서 샘플에 ✓ 또는 ✗를 표시하세요.
제 패턴 위에 카드가 나타나지 않는 이유는 무엇인가요?
카드는 RegexSmith가 패턴임을 알 수 있는 문자열 리터럴 위에 나타납니다: new Regex, Regex 정적 메서드, [GeneratedRegex] 또는 [RegularExpression]의 인수, 또는 그곳에서 사용되는 같은 파일의 상수입니다. 런타임에 만들어지는 패턴(연결되거나 설정에서 읽어 오는 패턴)은 읽을 수 없습니다. 설정의 마우스를 올리면 패턴 설명도 확인하세요.
어떤 정규식 엔진을 사용하나요?
Visual Studio 자체가 실행되는 .NET 정규식 엔진을 호출의 옵션과 함께 사용합니다. RegexOptions.NonBacktracking(.NET 7+)도 호출에서 읽어 옵니다. 이 경우 샘플은 일반 엔진에서 실행되지만, 어느 쪽이든 일치하는 문자열은 같습니다.
코드에 적용을 눌렀는데 아무 일도 일어나지 않았습니다.
테스터가 연 뒤에 패턴의 코드가 바뀌었기 때문에, RegexSmith는 더 이상 패턴이 없을 수도 있는 곳에 쓰지 않습니다 — 테스터의 버튼 아래에 그렇게 표시됩니다. 패턴에서 테스터를 다시 여세요. 코드에 옵션을 넣을 자리가 없는 경우([RegularExpression]는 옵션을 받지 않음) 패턴만 쓰고 옵션은 쓰지 않습니다.
VB.NET, JavaScript, TypeScript에서도 작동하나요?
1.0에서는 아닙니다: C#만 지원합니다. 다른 언어는 다른 엔진을 사용합니다. 필요하다면 Feedback 리포지토리에 요청해 주세요.
문제를 보고하거나 기능을 제안하려면 어디로 가야 하나요?
GitHub의 Feedback 리포지토리에 이슈를 등록하세요. 버그와 아이디어를 위한 양식이 있습니다(비공개 이름은 바꿔 주세요). Marketplace의 Q&A 탭을 이용할 수도 있습니다.
변경 내역
1.0.1
- 편집기 힌트가 옵션 페이지에 자체 목록을 갖게 되었고, 도구 설명의 링크로 보이는 그 자리에서 힌트 종류를 끌 수 있습니다.
1.0.0
- 첫 릴리스: 쉬운 말로 풀어 쓴 설명, 색으로 구분된 그룹, .NET 엔진으로 확인한 샘플, 상태를 보여 주는 호버 카드; 코드 안의 그룹 밑줄; 멈출 수 있는 패턴을 위한 RX001과 Ctrl+.의 원자 그룹 및 NonBacktracking 수정; 기대값, 그룹, 바꾸기, 단위 테스트로 복사, 코드에 적용을 갖춘 RegexSmith 테스터; 한 번만 하는 평가 요청.