# 정규식 (Regular Expression)

> Proxyman의 Map Local, Breakpoint 등 도구에서 Wildcard와 Regex 매칭 규칙을 사용하고, 저장하기 전에 샘플 URL로 규칙을 테스트하세요.

## 1. 무엇인가요? {#1-whats-it}

Proxyman은 2.3.0 버전부터 모든 디버깅 도구에서 매칭 규칙을 정의할 때 **Wildcard**와 **Regex** 방식을 지원합니다(전체 단어 일치):

* [Map Local](https://proxyman.com/docs/ko/advanced-features/map-local)
* [Map Remote](https://proxyman.com/docs/ko/advanced-features/map-remote)
* [Block List](https://proxyman.com/docs/ko/advanced-features/blacklist) 및 [Allow List](https://proxyman.com/docs/ko/advanced-features/whitelist)
* [Breakpoint](https://proxyman.com/docs/ko/advanced-features/breakpoint)
* [Protocol Buffers (Protobuf)](https://proxyman.com/docs/ko/advanced-features/protobuf)
* [Reverse Proxy](https://proxyman.com/docs/ko/advanced-features/reverse-proxy)
* [Network Conditions](https://proxyman.com/docs/ko/advanced-features/network-throttling)
* ...

이를 통해 어떤 요청에 도구를 적용할지 정확하게 지정할 수 있습니다.

![Matching Rule 열에 Regex 규칙 1개와 Wildcard 규칙 2개가 있는 Proxyman Map Remote 규칙 목록](https://proxyman.com/docs/assets/proxyman-map-remote-rules.jpg)

_Wildcard 및 Regex 규칙_

## 2. URL 테스트 (새 기능 🎉) {#2-test-your-url-new-feature-}

Proxyman v4.8.0부터 Wildcard 또는 Regex 규칙을 빠르게 테스트할 수 있습니다.

* Wildcard 또는 Regex 규칙을 빠르게 테스트하고 시험해 볼 수 있습니다.
* **시간 절약**: URL을 확인하려고 여러 화면을 오갈 필요가 없습니다.
* 실수를 줄일 수 있습니다.

![wildcard http://localhost:3000/* 규칙을 URL 3개와 비교하는 Proxyman Test Rules 창. 각 URL은 Matched 또는 Not Matched로 표시됨](https://proxyman.com/docs/assets/proxyman-test-rules-window.jpg)

_규칙을 URL에 대해 테스트_

#### 사용 방법 {#how-to-use-it}

1. 디버깅 도구(Breakpoint, Map Local 등)를 열고 새 규칙을 만듭니다.
2. **Test your Rule** 버튼을 클릭합니다. Test Rules 창이 열립니다.
3. 규칙과 확인할 URL을 추가합니다.

* :white\_check\_mark: Matched: URL이 규칙과 일치합니다.
* :warning: Not Matched: URL이 규칙과 일치하지 않습니다. Wildcard 또는 Regex 규칙을 다시 작성해야 할 수 있습니다.

## 3. Wildcard {#3-wildcard}

Proxyman은 `*`와 `?`, 두 가지 간단한 Wildcard 문자를 지원합니다.

| Wildcard | 설명                                                 |
| -------- | ---------------------------------------------------- |
| `*`      | `*`는 0번 이상 임의의 문자와 일치합니다.             |
| `?`      | `?`는 임의의 문자 한 개와 일치합니다.                |

예를 들어:

* http://proxyman.io/v1/\*
* https://myserver.com/v?/\*

## 4. Regex {#4-regex}

Proxyman은 Regex도 지원합니다. 

* 정규식이 **URL 전체와 일치**하는지 확인하세요.
* **부분 일치**는 일치하지 않는 것으로 간주됩니다.
* 슬래시(/), 점(.) 등의 문자를 올바르게 **이스케이프**했는지 확인하세요.

예를 들어:

| Regex                                                                        | 일치하는 URL 예시                                                                                |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ |
| https:\\/\\/proxyman\\.io.\*                                                 | <p>https://proxyman.io<br>https://proxyman.io/v1/data?id=123<br>https://proxyman.io/pricing</p>  |
| ^(http\|https):\\/\\/www\\.google\\.com.\*                                   | <p>http://www.google.com<br>http://www.google.com/user?id=proxyman<br>https://www.google.com</p> |
| ^(http\|https)?:\\/\\/www\\.google\\.com\\/v\[0-9]?\\/build\\?query=proxyman | <p>http://www.google.com/v1/build?query=proxyman<br>www.google.com/v2/build?query=proxyman</p>   |

정규식이 URL 전체와 일치하는지 [regex101](https://regex101.com/)에서 확인할 수 있습니다.

![regex101에서 google.com URL 3개와 전체 일치하는 정규식을 테스트한 화면](https://proxyman.com/docs/assets/1.png)

> **노트:** Proxyman은 Apple의 NSRegularExpression을 사용합니다. 지원되는 메타 문자, 연산자, 플래그는 Apple Developer 문서의 [**Regex** **메타 문자, 연산자 및 플래그**](https://developer.apple.com/documentation/foundation/nsregularexpression#1965590)에서 확인하세요.

> **노트:** [regex101.com](https://regex101.com)에서 정규식을 테스트해 주어진 URL과 전체가 일치하는지 확인하세요.

* 규칙을 만들 때 **Use Regex**를 선택합니다.

> **노트:** 정규식에서 `?`와 `*`는 Wildcard와 다른 의미를 가집니다. Wildcard의 `?`는 정규식 `.`에 해당하고, Wildcard의 `*`는 정규식 `.*`에 해당합니다.
