C# 用于断言组织单位有效的正则表达式

C# 用于断言组织单位有效的正则表达式,c#,regex,active-directory,C#,Regex,Active Directory,我正在用c#构建一个Active Directory“miner”,并且需要断言输入字符串确实是一个有效的(正确的“语法”)组织单元 组织单元是这样建立的:CN=SomeName,OU=SomeOrganizationalUnit,DC=SomeDomainPart,DC=SomeDomainPart,DC=SomeDomainPart 它不必包含CN=或OU=,它至少可以包含两个DC=,例如: “DC=example,DC=com” 所以我需要的是匹配两个字符(A-z),然后“=”,然后是一个

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

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

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

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

我仍然主要处于regexp的复制页状态。 这是我为初学者准备的

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

您可以这样做(从Lloyd的原始regex开始):

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

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

^(?:(?:CN|OU|DC)\=\w+,)+(?:CN|OU|DC)\=\w+$
如果要要求组数在一定范围内,请使用量词:

^(?:(?:CN|OU|DC)\=\w+,){1,3}(?:CN|OU|DC)\=\w+$
这总共需要两到四组


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

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

^[A-Za-z]{2}=[A-Za-z0-9]+(,[A-Za-z]{2}=[A-Za-z0-9]+)+$

“SomeDomainPart”允许使用哪些字符?
^[A-Za-z]{2}=[A-Za-z0-9]+(,[A-Za-z]{2}=[A-Za-z0-9]+)+$