用于解析Active Directory字符串的正则表达式失败

时间:2015-04-22 15:57:37

标签: c# regex code-behind

我在C#代码隐藏中有这段代码:

string input = "CN=L_WDJACK127_WDC_SSIS_USER_CH,OU=ALOSup,OU=Infra,DC=internal, DC=mycompany,DC=com"
string pattern = @"CN\=(.+)\,";

MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
    Console.WriteLine(match.Groups[1].Value);
}

当我运行时, match.Groups [1] .Value 等于

  

L_WDJACK127_WDC_SSIS_USER_CH,OU = ALOSup,OU =红外,DC =内部,   DC = myCompany中

我需要它等于

  

L_WDJACK127_WDC_SSIS_USER_CH

有人可以修复我的正则表达式吗?

1 个答案:

答案 0 :(得分:1)

基本贪婪/懒惰量词问题:

string pattern = @"CN\=(.+?)\,";

此资源应该有助于解释原因:http://www.regular-expressions.info/repeat.html

基本上,.+尝试将与任何字符匹配,并且在点击最后逗号之前尽可能至少匹配其中一个字符。通过在其末尾添加?.+?),您可以告诉正则表达式引擎在您点击<之前,尽可能多地匹配中的任意一个,并且至少有一个字符匹配< strong>第一个逗号