Exchange Online中邮件流规则中的正则表达式

可以使用正则表达式 (正则表达式) 邮件流规则中的条件和例外 (也称为传输规则) ,以匹配邮件头、发件人、收件人、主题和邮件正文 (不同部分的文本模式,例如邮件头、发件人、收件人、主题和邮件正文) 。 条件和例外确定是否应将规则中的操作应用于电子邮件。

注意

由于客户环境的差异,Microsoft 客户支持服务 (CSS) 无法参与自定义正则表达式脚本的开发或测试 (“RegEx 脚本”) 。 对于 RegEX 自定义脚本开发、测试和调试,Microsoft 365 客户需要依赖内部 IT 资源。 或者,Microsoft 365 客户可以选择使用外部咨询资源,例如 Microsoft 咨询服务 (MCS) 。 无论脚本开发资源如何,CSS 支持工程师都无法帮助客户进行自定义正则表达式脚本查询。

正在查找与邮件流规则相关的管理任务? 请参阅 Exchange Online 中的邮件流规则 (传输规则)

简单表达式与正则表达式

“简单表达式”是要完全在邮件中匹配的特定值。 使用简单表达式的条件和异常与特定字词或文本字符串匹配。 例如,查找名为 “年度销售”的文档 的邮件流规则条件 Forecast.docx。

“正则表达式”是一种简洁而灵活的表示法,可用于查找邮件中的文本模式。 该表示法由以下两种基本字符类型组成:

  • 文本字符:必须存在于目标字符串中的文本。 这些字符是普通字符,如类型所示。
  • 元字符:一个或多个特殊字符,用于指示文本在目标字符串中如何变化。

可以使用正则表达式快速分析电子邮件以查找特定的文本模式。 使用正则表达式可以检测具有特定类型内容的消息,例如社会安全号码 (SSN) 、专利号码和电话号码。

无法合理地将变量数据与简单表达式匹配,因为简单表达式需要检测值的每个可能变体。 在消息内容中匹配大量简单表达式可能会占用大量资源。 使用正则表达式的效率更高。 可以配置邮件流规则条件以搜索文本模式,而不是指定所有可能的变体。

Exchange Online中的正则表达式

Exchange Online PowerShell 中,以 MatchesPatterns 结尾的参数名称使用正则表达式。 在 Exchange 管理中心 (EAC) 、以 ... 结尾的条件和异常名称 。匹配这些文本模式中的任何一种使用 正则表达式。 有关 Exchange Online 中的邮件流规则条件和例外的详细信息,请参阅 Exchange Online 中) 谓词 (邮件流规则条件和例外

警告

仔细测试正则表达式。 错误配置的正则表达式可能会产生意外的匹配,并导致不需要的邮件流规则行为,包括:

  • 对消息和消息内容执行不需要的操作。
  • 潜在的数据丢失。

复杂的正则表达式还可能会影响邮件流性能。 应先在测试环境中对正则表达式进行测试,然后才能将其用于生产环境。

下表列出了可用于在 Exchange Online 中创建模式匹配正则表达式的模式字符串:

模式字符串 说明
\S \S 模式字符串将与任何非空格的单个字符匹配。
\s \s 模式字符串将与任何单个空白字符匹配。
\D \D 模式字符串将与任何非数值数字匹配。
\d \d 模式字符串将与任何单个数值数字匹配。
\w \w 模式字符串与分类为字母或十进制数字的任何单个 Unicode 字符匹配。
\W \W 模式字符串将与未归类为字母或十进制数字的任何单个 Unicode 字符匹配。
* 星号 ( * ) 字符与上一个字符的零个或多个实例匹配。 例如, ab*c 匹配以下字符串: acabcabbbbc
| 管道 ( |) 字符充当 OR 运算符。 例如,“contoso|fabrikam”与 或 fabrikam的任何实例contoso匹配。
( ) 圆括号充当分组分隔符。 例如, \a(bc)*\ 匹配以下字符串:aabcabcbcabcbcbc、 等。
\ 反斜杠用作特殊字符之前的转义字符。 特殊字符是在模式字符串中使用的字符:
  • 反 斜 杠 \
  • 管道 |
  • 星号 *
  • 左括号 (
  • 右括号 )
  • 插入符号 ^
  • 美元符号 $

例如,如果要匹配包含 的 (525)字符串,请使用 \(525\)

^ 插入符号 ( ^ ) 字符指示插入符号后面的模式字符串必须存在于要匹配的文本字符串的开头。 例如, ^fred@contoso 匹配 和 fred@contoso.co.uk ,但不匹配 fred@contoso.comalfred@contoso.com
$ 美元符号 ( ) $ 字符表示前面的模式字符串必须存在于要匹配的文本字符串的末尾。 例如, contoso.com$ 匹配 adam@contoso.comkim@research.contoso.com ,但不匹配 kim@contoso.com.au

构造正则表达式

通过使用上表,可以构造一个正则表达式,该正则表达式与要匹配的数据的模式相匹配:

  • 请从左到右在要匹配的数据中检查每个字符或字符组。
  • 阅读每个模式字符串的说明,确定如何将其应用于要匹配的数据。
  • 确定表中的哪个模式字符串表示该字符或字符组,并将该模式字符串添加到正则表达式。

注意

传输规则中使用的正则表达式 区分大小写。

以下示例匹配格式为 425 555-0100 和 425.555.0100 的北美电话号码:

425(\s|.)\d\d\d(-|.)\d\d\d\d

通过添加在区域代码前后使用圆括号的电话格式 (425) 555-0100,可以扩展此示例。

以下示例匹配所有三种电话号码格式。

\d\d\d((\s|.|-|\)|\)\s)\d\d\d(\s|.|-)\d\d\d\d

可以按如下所示分析上面的示例:

  • \d\d\d:要求首先显示恰好三个数字。
  • ((\s|.|-|\)|\)\s):要求三位数后存在空格、句点或连字符。 每个字符匹配的字符串都包含在分组分隔符中,并被管道字符分隔。 这种分隔意味着分组分隔符内的指定字符中只有一个可以存在于要匹配的字符串中的此位置。 对于区号与接下来的三位数字之间的分隔,它还会查找闭括号或闭括号和空格。
  • \d\d\d:要求接下来显示恰好三个数字。
  • (\s|.|-):要求三位数后存在空格、句点或连字符。
  • \d\d\d\d:要求旁边正好显示四位数字。

前面的示例与以下值匹配:

  • (425) 555.0100
  • 425 555 0100
  • 425 555 0100
  • (425) 555-0100
  • 425-555-0100
  • (425) 555-0100

创建使用正则表达式的邮件流

以下示例在 Exchange Online PowerShell 中创建一个邮件流规则,该规则使用正则表达式来匹配电子邮件主题中的 SSN:

New-TransportRule -Name "Social Security Number Block Rule" -SubjectOrBodyMatchesPatterns '\d\d\d-\d\d-\d\d\d\d' -RejectMessageEnhancedStatusCode "5.7.1" -RejectMessageReasonText "This message has been rejected because of content restrictions"

有关语法和参数的详细信息,请参阅 New-TransportRule

以下示例显示了新的邮件流规则:

Get-TransportRule "Social Security Number Block Rule" | Format-List

有关语法和参数的详细信息,请参阅 Get-TransportRule