正则表达式断言组织单位有效

时间:2013-02-20 15:09:59

标签: c# regex active-directory

我正在c#中构建一个Active Directory“miner”,并且需要声明imput字符串确实是一个有效的(正确的“语法”)组织单元。

组织单位的构建方式如下: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

2 个答案:

答案 0 :(得分: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),那么您要求的单个正则表达式太多了。您将需要一个多步骤的方法。

答案 1 :(得分:1)

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

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