# 自定义模式参考

使用特定的正则表达式语法为 secret scanning 定义准确的自定义模式。

## 自定义模式的正则表达式库

Secret scanning 自定义模式是使用 [Hyperscan 库](https://github.com/intel/hyperscan)定义的，并且只支持 Hyperscan 正则表达式构造（PCRE 语法的子集）。 不支持 Hyperscan 选项修饰符。 有关 Hyperscan 模式构造的详细信息，请参阅 Hyperscan 文档中的[模式支持](https://intel.github.io/hyperscan/dev-reference/compilation.html#pattern-support)。

## 用于手动定义自定义模式的语法

UI 中的 **“More options <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-chevron-down" aria-label="chevron-down" role="img"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg>**”部分可以帮助您手动编写正则表达式。

* 
              **机密格式：** 描述机密本身格式的表达式。
* 
              **机密之前：** 用于描述机密之前字符的表达式。 默认情况下，此值设置为 `\A|[^0-9A-Za-z]`，这意味着机密必须位于行首或前面有非字母数字字符。
* 
              **机密之后：** 描述机密后面的字符的表达式。 默认情况下，此值设置为 `\z|[^0-9A-Za-z]`，这意味着机密后面必须跟有新行或非字母数字字符。
* 
              **其他匹配要求：** 机密本身必须或不得匹配的一个或多个可选表达式。

对于简单令牌，通常只需指定机密格式。 其他字段提供了灵活性，以便您可以指定更复杂的机密，而无需创建复杂的正则表达式。

### 自定义模式示例

公司具有具有五个特征的内部令牌。 它们使用不同的字段来指定如何标识令牌，如下所示：

| 
              **特征** | 
              **字段和正则表达式** |
|----------------|------------------------------|
| 长度介于 5 到 10 个字符之间 | 机密格式：`[$#%@AA-Za-z0-9]{5,10}` |
| 不以 `.` 结尾 | 机密之后：`[^\.]` |
| 包含数字和大写字母 | 其他要求：机密必须匹配 `[A-Z]` 和 `[0-9]` |
| 一行中不包含多个小写字母 | 其他要求：机密不得匹配 `[a-z]{2,}` |
| 包含 `$%@!` 之一 | 其他要求：密钥必须匹配 `[$%@!]` |

这些令牌将与上述自定义模式匹配：

```shell
a9@AAfT!         # Secret string match: a9@AAfT
ee95GG@ZA942@aa  # Secret string match: @ZA942@a
a9@AA!ee9        # Secret string match: a9@AA
```

这些字符串与上述自定义模式不匹配：

```shell
a9@AA.!
a@AAAAA
aa9@AA!ee9
aAAAe9
```

## 限制

Secret scanning支持每个组织或企业帐户最多 500 个自定义模式，每个存储库最多 100 个自定义模式。