在针对Active Directory执行某些任务时,我有一个值得尊重的术语。
这是命名法:
- TT -EEE-Mnemonic:如果 TT ='GA'或'GS'或'PA'或'PF' - >要创建的架构是一个“组”,其groupScope为 Global 。
- LT -EEE-Mnemonic:如果 T ='A'或'G'或'I'或'N'或'P' - >要创建的架构是“组”,其中groupScope为域本地。
- TTT -EEE-Mnemonic:如果 TTT * ='CNX'或'GST'或'SVC' - >要创建的shema是“用户”
- T -SSSS-Mnemonic:如果 T ='A'或'L'或'M'或'R'或'S' - >要创建的架构是“organizationUnit”
我所追求的是比这更简单,更有效的方式:
If(dn.Substring(3, 2).Contains("GA") _
Or variable.Substring(3, 2).Contains("GS") _
Or dn.Substring(3, 2).Contains("PA") _
Or dn.Substring(3, 2).Contains("PF")) Then
schema = "group" ' Global'
Else If(dn.Substring(4, 1).Contains("A") _
Or dn.Substring(4, 1).Contains("G") _
Or dn.Substring(4, 1).Contains("I") _
Or dn.Substring(4, 1).Contains("N") _
Or dn.Substring(4, 1).Contains("P")) Then
schema = "group" ' Local'
Else If(dn.Substring(3, 3).Contains("CNX") _
' Well... You get the idea, don't you?
End If
我想我可以使用RegularExpression
,或者也许每个命名法使用一个,类似的东西。
在这种情况下,RegularExpression
是否有办法变得方便?或者最好坚持那个老大 - 如果?欢迎任何建议。
很抱歉,但我不习惯使用RegularExpression
。我知道他们存在,他们可以做些什么,但这就是全部。
谢谢!
答案 0 :(得分:2)
您的代码似乎不符合您的描述。根据您的描述,您可能需要以下正则表达式:
^(((GA|GS|PA|PF)|L[AGINP]|(CNX|GST|SVC))-EEE|[ALRMS]-SSSS)$
编辑:您可能希望阅读this tutorial关于正则表达式的含义,特别是查找“字符类”和“分组和替代”部分。
简而言之,条形字符(即|)是“OR”运算符。方括号(即[])是字符类;换句话说,字符之间的“或”。
答案 1 :(得分:1)
怎么样......
Dim Schema As String = Nothing
Select Case dn.SubString(3, 2) ' Am not sure about your index of 3 here!
Case "GA", "GS", "PA", "PS"
Schema = "group"
End Select
If IsNothing(Schema) Then
Select Case ...
End If
etc.
答案 2 :(得分:1)
它大大减少了测试次数和显式Or
。
If Regex.IsMatch(dn, "^CN=(G[AS]|P[AF])-") Then
schema = "group" ' Global 'damn syntax highlighting
ElseIf Regex.IsMatch(dn, "^CN=L[AGINP]-") Then
schema = "group" ' Local 'damn syntax highlighting
ElseIf Regex.IsMatch(dn, "^CN=(CNX|GST|SVC)-") Then
schema = "user"
ElseIf Regex.IsMatch(dn, "^CN=[ALMRS]-") Then
schema = "organizationUnit"
End If