0

我正在 c# 中构建一个 Active Directory“矿工”,并且需要断言输入字符串确实是一个有效的(正确的“语法”)组织单位。

一个组织单位是这样建立的:CN=SomeName,OU=SomeOrganizationalUnit,DC=SomeDomainPart,DC=SomeDomainPart,DC=SomeDomainPart

它不必包含 CN= 或 OU=,它可以包含至少两个 DC=,例如: "DC=example,DC=com"

所以我需要的是匹配两个字符(Az),然后是“=”,然后是一个单词(a-zAZ0-9)然后是一个逗号,这个组可能会出现无限次,但至少必须存在两个。整个字符串可能永远不会以逗号结尾。

我仍然主要处于正则表达式的复制页面状态。这就是我的初学者

.[a-zA-Z0-9]{2}.[=]\W
4

2 回答 2

1

您可以执行以下操作(从 Lloyd 的原始正则表达式开始):

^(?:(?:CN|OU|DC)\=\w+,)*(?:CN|OU|DC)\=\w+$

匹配零个或多个组,后跟逗号,然后是最后一组。

如果您想要求至少有两个组,只需更改*+

^(?:(?:CN|OU|DC)\=\w+,)+(?:CN|OU|DC)\=\w+$

如果要要求组数在一定范围内,请使用量词:

^(?:(?:CN|OU|DC)\=\w+,){1,3}(?:CN|OU|DC)\=\w+$

这总共需要两到四组。

如果您有其他要强制执行的要求(例如始终必须包含 DC,或者如果 OU 和 CN 不存在,则至少有两个 DC),那么您对单个正则表达式的要求太多。您将需要一个多步骤的方法。

于 2013-02-20T15:27:27.790 回答
1

以下正则表达式将匹配(两个字符 Az、等于、一个或多个字符 A-z0-9)两次或更多次,每次之间用逗号分隔:

^[A-Za-z]{2}=[A-Za-z0-9]+(,[A-Za-z]{2}=[A-Za-z0-9]+)+$
于 2013-02-20T15:28:19.103 回答