在 NPS 中使用正则表达式
本主题说明如何在 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)。