Каким будет RegularExpression для следующих? - PullRequest
0 голосов
/ 20 августа 2010

Я должен соблюдать номенклатуру при выполнении некоторых задач в Active Directory.

Вот номенклатура:

  • TT -EEE-Mnemonic: если TT = 'GA' или 'GS' или 'PA' или 'PF' -> создаваемая схема является «группой» , с groupScope Global .
    1. LT -EEE-Mnemonic: если T = 'A' или 'G', или 'I', или 'N', или 'P' -> схема для создания «группа», с groupScope Домен локальный .
    2. TTT -EEE-Mnemonic: если TTT * = 'CNX' или 'GST' или 'SVC' -> создаваемая схема - это "пользователь"
    3. 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. Я знаю, что они существуют, и немного из того, что они могут сделать, но это все.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 20 августа 2010

Ваш код не соответствует вашему описанию.С вашим описанием вам может потребоваться следующее регулярное выражение:

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

РЕДАКТИРОВАТЬ: вы можете прочитать этот урок о том, что означает регулярное выражение, в частности, ищитеклассы »и« Группировка и альтернативы ».

Короче говоря, символ бара (т.е. |) является оператором «ИЛИ».Квадратные скобки (т.е. []) являются классом символов;другими словами, «ИЛИ» между символами.

1 голос
/ 20 августа 2010

Это значительно уменьшит количество тестов и явных 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
1 голос
/ 20 августа 2010

Как насчет ...

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.
...