代码之家  ›  专栏  ›  技术社区  ›  Will Marcouiller

下面的常规表达是什么?

  •  0
  • Will Marcouiller  · 技术社区  · 14 年前

    • -EEE助记符:如果 ='GA'或'GS'或'PA'或'PF'->要创建的架构是一个“组”,其groupScope为 全球的 .
      1. 书信电报 -EEE助记符:如果 T型 ='A'或'G'或'I'或'N'或'P'->要创建的架构是一个“组”,其groupScope为 .
      2. -EEE助记符:如果 TTT公司* ='CNX'或'GST'或'SVC'->要创建的shema是“用户”
      3. T型 -SSSS助记符:如果 ='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

    有没有办法 正则表达式 在这种情况下能派上用场吗?还是最好还是坚持那个老的大前提?欢迎提出任何建议。

    对不起,我不习惯用 正则表达式 . 我知道他们存在,也知道他们能做些什么,但仅此而已。

    3 回复  |  直到 14 年前
        1
  •  1
  •   cHao    14 年前

    这将大大减少测试和显式测试的数量 Or s。

    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
    
        2
  •  2
  •   William Niu    14 年前

    您的代码似乎与您的描述不符。根据您的描述,您可能需要以下正则表达式:

    ^(((GA|GS|PA|PF)|L[AGINP]|(CNX|GST|SVC))-EEE|[ALRMS]-SSSS)$
    

    this tutorial

    简而言之,条形字符(即|)是“OR”运算符。方括号(即[])是字符类;换句话说,字符之间是“或”。

        3
  •  1
  •   Will A    14 年前

    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.