2013-02-20 87 views
0

我在c#中構建了Active Directory「miner」,並需要聲明輸入字符串確實是有效的(正確的「語法」)組織單位。用於聲明組織單元有效的正則表達式

的組織單位建立這樣的: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 
+1

哪些允許的字符對「SomeDomainPart」? – nhahtdh 2013-02-20 15:12:54

回答

1

你可以做這樣的事情(從勞氏原正則表達式):

^(?:(?: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),那麼您需要太多的單個正則表達式。你將需要一個多步驟的方法。

+0

這工作就像一個魅力!非常感謝! – MollyPorph 2013-02-21 08:19:02

1

下面的正則表達式匹配(兩個字符AZ,等於,一個或多個字符A-Z0-9)兩次或更多次,每次之間逗號:

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