# 正则表达式（Regex）

> 在 Proxyman 的 Map Local、Breakpoint 等工具中使用通配符和正则表达式匹配规则，并在保存前用示例 URL 测试你的规则。

## 1. 这是什么？ {#1-whats-it}

从 2.3.0 版本开始，在为所有调试工具定义匹配规则时，Proxyman 支持 **Wildcard**（通配符）和 **Regex**（正则表达式，整词匹配）：

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

它可以帮助你精确定义哪些请求会触发该工具。

![Proxyman Map Remote 规则列表，“Matching Rule”列中包含一条 Regex 规则和两条 Wildcard 规则](https://proxyman.com/docs/assets/proxyman-map-remote-rules.jpg)

_通配符和正则表达式规则_

## 2. 测试你的 URL（新功能 🎉） {#2-test-your-url-new-feature-}

从 Proxyman v4.8.0 开始，你可以快速测试规则（通配符或正则表达式）。

* 快速测试并验证你的通配符或正则表达式规则。
* **节省时间**：无需来回切换即可检查 URL。
* 减少出错。

![Proxyman Test Rules 窗口，使用通配符 http://localhost:3000/* 检查三个 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 与规则不匹配。你可能需要重写通配符或正则表达式规则。

## 3. 通配符 {#3-wildcard}

Proxyman 支持两种简单的通配符：`*` 和 `?`

| 通配符 | 说明                                                       |
| ------ | ---------------------------------------------------------- |
| `*`    | 通配符中的星号匹配零个或多个任意字符。                     |
| `?`    | 问号匹配恰好一个字符。                                     |

例如：

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

## 4. 正则表达式（Regex） {#4-regex}

Proxyman 还支持正则表达式。 

* 请确保你的正则表达式**匹配整个 URL**。
* **部分匹配**视为不匹配。
* 请确保正确**转义字符**，例如斜杠（/）、点号（.）等。

例如：

| 正则表达式                                                                   | 匹配的 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>   |

你可以使用 [regex101](https://regex101.com/) 检查正则表达式是否完整匹配 URL。

![regex101 测试页面，正则表达式完整匹配三个 google.com URL](https://proxyman.com/docs/assets/1.png)

> **备注:** Proxyman 使用 Apple 的 NSRegularExpression。请在 Apple 开发者文档中查看 [**Regex** **元字符、运算符与标志**](https://developer.apple.com/documentation/foundation/nsregularexpression#1965590)，了解支持哪些元字符、运算符和标志。

> **备注:** 请在 [regex101.com](https://regex101.com) 上检查你的正则表达式，并确保它能完整匹配给定的 URL。

* 创建规则时，请选择 **Use Regex**。

> **备注:** 在正则表达式中，`?` 和 `*` 的含义与通配符不同。通配符 `?` 对应正则表达式的 `.`，通配符 `*` 对应正则表达式的 `.*`。
