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

本文关键字:正则表达式 有效 单元 断言 | 更新日期: 2023-09-27 18:00:13

我正在c#中构建一个Active Directory"矿工",需要断言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

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

您可以这样做(从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),那么您对单个正则表达式的要求太高了。你需要一个多步骤的方法。

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

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