我正在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
答案 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]+)+$