以下是正则表达式的内容?

时间:2010-08-19 22:45:07

标签: vb.net regex .net-2.0

在针对Active Directory执行某些任务时,我有一个值得尊重的术语。

这是命名法:

  
      
  • TT -EEE-Mnemonic:如果 TT ='GA'或'GS'或'PA'或'PF' - >要创建的架构是一个“组”,其groupScope为 Global 。      
        
    1. LT -EEE-Mnemonic:如果 T ='A'或'G'或'I'或'N'或'P' - >要创建的架构是“组”,其中groupScope为域本地
    2.   
    3. TTT -EEE-Mnemonic:如果 TTT * ='CNX'或'GST'或'SVC' - >要创建的shema是“用户”
    4.   
    5. T -SSSS-Mnemonic:如果 T ='A'或'L'或'M'或'R'或'S' - >要创建的架构是“organizationUnit”
    6.   
  •   

我所追求的是比这更简单,更有效的方式:

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。我知道他们存在,他们可以做些什么,但这就是全部。

谢谢!

3 个答案:

答案 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