簡體   English   中英

需要使用正則表達式模式來分隔專有名稱嗎?

[英]Need regular expression pattern to get the distinguished name separated?

后面的字符串包含由分號連接的多個專有名稱。 我需要使用正則表達式模式來分隔專有名稱。

"CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local;CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local;CN=rrr\ttt,OU=OU1,DC=dom1,DC=local;CN=Vvvv,OU=OU1,DC=dom1,DC=local"

需要的結果:

CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local
CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local
CN=rrr\ttt,OU=OU1,DC=dom1,DC=local
CN=Vvvv,OU=OU1,DC=dom1,DC=local

您需要對分號進行Regex.Split ,但要使用零寬度負向后聲明來排除反斜杠轉義的斷言。 -基本上檢查分號前與\\不匹配的內容,但不要在拆分中包括它。

這是(?<!pattern)的形式,您希望它匹配但忽略反斜杠[\\\\] ,最后匹配分號,因此完整的模式變為@"(?<![\\\\]);"

string dn = @"CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local;CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local;CN=rrr\ttt,OU=OU1,DC=dom1,DC=local;CN=Vvvv,OU=OU1,DC=dom1,DC=local";

string[] vals = Regex.Split(dn, @"(?<![\\]);");
foreach (var val in vals)
{
    Console.WriteLine(val);
}

輸出:

  • CN = s \\,tttrrr,OU = OU1,DC = dom1,DC =本地
  • CN = g \\; hi \\,klm,OU = OU1,DC = dom1,DC =本地
  • CN = rrr \\ ttt,OU = OU1,DC = dom1,DC =本地
  • CN = Vvvv,OU = OU1,DC = dom1,DC =本地

試試這個模式(?i:;)?([^>]+?local)

string input= @"CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local;CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local;CN=rrr\ttt,OU=OU1,DC=dom1,DC=local;CN=Vvvv,OU=OU1,DC=dom1,DC=local";
Regex pattern = new Regex(@"(?<=local);");
string[] result = pattern.Split(input);
result.ToList().ForEach(a => Console.WriteLine(a));

輸出:

CN=s\,tttrrr,OU=OU1,DC=dom1,DC=local
CN=g\;hi\,klm,OU=OU1,DC=dom1,DC=local
CN=rrr\ttt,OU=OU1,DC=dom1,DC=local
CN=Vvvv,OU=OU1,DC=dom1,DC=local

你可以使用這種模式

(CN=(?:(?!CN=).)*)(?:;|$)  

演示版

或這種模式

(CN=(?:[^C]|C(?!N=))*)(?:;|$)  

演示版

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM