在 NPS 中使用正则表达式

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

本主题说明如何在 Windows Server 的 NPS 中使用正则表达式进行模式匹配。 可以使用此语法来指定网络策略属性和 RADIUS 领域的条件。

注意

对于采用字符串值的所有设置,NPS 控制台和 NPS MMC 管理单元的字符数限制为 256。 这包括可以使用正则表达式配置的所有设置。 若要配置超过 256 个字符的字符串值,请使用 NETSH NPS 命令。 若在 NPS 控制台或 NPS MMC 管理单元中编辑超过 256 个字符的已配置字符串值,则该值必然会成为无效值。

模式匹配参考

使用模式匹配语法来创建正则表达式时,可以将下表作为参考源。 请注意,正则表达式模式通常用正斜杠 (/) 括起来。

字符 说明 示例
\ 指示后面的字符是特殊字符,或者应按字面解释。 /n/ matches the character "n" while the sequence /\n/ matches a line feed or newline character.
^ 与输入或行的开头匹配。  
$ 与输入或行的结尾匹配。  
* 与前面的字符零次或更多次匹配。 /zo*/ matches either "z" or "zoo."
+ 与前面的字符一次或更多次匹配。 /zo+/ matches "zoo" but not "z."
? 与前面的字符零次或一次匹配。 /a?ve?/ matches the "ve" in "never."
. 与换行符外的任何单个字符匹配。  
(pattern) 与“模式”匹配并记住匹配项。
若要匹配文本字符 ()括号),请使用 \(\)
 
x | y 与 x 或 y 匹配。
{n} 正好匹配 n 次(n 为非负整数)。 /o{2}/ does not match the "o" in "Bob," but matches the first two instances of the letter o in "foooood."
{n,} 至少匹配 n 次(n 为非负整数)。 /o{2,}/ does not match the "o" in "Bob" but matches all of the instances of the letter o in "foooood." /o{1,}/ is equivalent to /o+/.
{n,m} 至少匹配 n 次,最多匹配 m 次(m 和 n 是非负整数)。 /o{1,3}/ matches the first three instances of the letter o in "fooooood."
[xyz] 与括住的任意一个字符(字符集)匹配。 /[abc]/ matches the "a" in "plain."
[^xyz] 与未括住的任意一个字符(负字符集)匹配。 /[^abc]/ matches the "p" in "plain."
\b 与字边界(如空格)匹配。 /ea*r\b/ matches the "er" in "never early."
\B 与非字边界匹配。 /ea*r\B/ matches the "ear" in "never early."
\d 与数字字符匹配(等效于 0 到 9 之间的数字)。  
\D 与非数字字符匹配(等效于 [^0-9])。  
\f 与换页符匹配。  
\n 与换行符匹配。  
\r 与回车符匹配。  
\s 与任何空白字符匹配,包括空格、制表符和换页符(等效于 [ \f\n\r\t\v])。  
\S 与任何非空白字符匹配(等效于 [^ \f\n\r\t\v])。  
\t 匹配制表符。  
\v 与垂直制表符匹配。  
\w 与任何单词字符匹配,包括下划线(等效于 [A-Za-z0-9_])。  
\W 与任何非单词字符匹配,不包括下划线(等效于 [^A-Za-z0-9_])。  
\num 指代记住的匹配项(?num,其中 num 为正整数)。 配置属性操作时,此选项只能用在“替换”文本框中 \1 将替换第一个记住的匹配项中存储的内容。
/n/ 允许将 ASCII 代码插入正则表达式(?n,其中 n 为八进制、十六进制或十进制转义值)。  

网络策略属性的示例

以下示例说明了如何使用模式匹配语法来指定网络策略属性:

  • 若要指定 899 区号中的所有电话号码,语法为:

    899.*

  • 若要指定以 192.168.1 开头的 IP 地址的范围,语法为:

    192\.168\.1\..+

在用户名属性中操作领域名称的示例

注意

领域操作不适用于 PEAP。
可以通过切换到 EAP-TLS 或 EAP-MSCHAPv2 进行身份验证,或者为需要解析的每个其他域名将 UPN 后缀添加到域来实现所需的行为。

以下示例描述了如何使用模式匹配语法来处理“用户名”属性的领域名,该属性位于连接请求策略属性中的“属性”选项卡上

删除用户名属性的领域部分

在外包的拨号方案中,Internet 服务提供商 (ISP) 将连接请求路由到组织 NPS,ISP RADIUS 代理可能需要使用领域名来路由身份验证请求。 但是,NPS 可能无法识别用户名的领域名部分。 因此,将领域名转发给组织 NPS 之前,必须通过 ISP RADIUS 代理来删除领域名。

  • 查找:@microsoft\.com

  • 将:

user@example.microsoft.com 替换为 example.microsoft.com\user

  • 查找:(.*)@(.*)

  • 替换:$2\$1

将 domain\user 替换为 specific_domain\user

  • 查找:(.*)\\(.*)

  • 替换:specific_domain\$2

将 user 替换为 user@specific_domain

  • 查找:$

  • 替换:@specific_domain

通过代理服务器转发 RADIUS 消息的示例

将 NPS 用作 RADIUS 代理时,可以创建路由规则,将带有指定领域名称的 RADIUS 消息转发给一组 RADIUS 服务器。 以下是根据领域名称路由请求的推荐语法。

  • NetBIOS 名称WCOAST
  • 模式^wcoast\\

在下面的示例中,wcoast.microsoft.com 是 DNS 或 Active Directory 域 wcoast.microsoft.com 的唯一用户主体名称 (UPN) 后缀。 使用提供的模式,NPS 代理可以根据域 NetBIOS 名称或 UPN 后缀路由消息。

  • NetBIOS 名称WCOAST
  • UPN 后缀wcoast.microsoft.com
  • 模式^wcoast\\|@wcoast\.microsoft\.com$

有关管理 NPS 的详细信息,请参阅管理网络策略服务器

有关 NPS 的详细信息,请参阅网络策略服务器 (NPS)