str = @"[abc,def],123,[def,abc],456[123,def,456,abc],[abc],[def],[123]";如何 str 如何匹配出所有中括号中带有abc和def的结果
结果如:
[abc,def]
[def,abc]
[123,def,456,abc]
[abc]
[def]

解决方案 »

  1.   

                string str = @"[abc,def],123,[def,abc],456[123,def,456,abc],[abc],[def],[123]";
                Regex reg = new Regex(@"\[(?:[^\]]*abc[^\]]*(?:def)?[^\]]*|[^\]]*def[^\]]*(?:abc)?[^\]]*)\]");
                foreach (Match m in reg.Matches(str))
                    Console.WriteLine(m.Value);
      

  2.   


                string str = @"[abc,def],123,[def,abc],456[123,def,456,abc],[abc],[def],[123]";
                MatchCollection matches= Regex.Matches(str, @"(\[[^\]]*?\])",RegexOptions.IgnoreCase);
                foreach (Match match in matches)
                {
                    if (match.Groups[1].Value.Contains("abc") && match.Groups[1].Value.Contains("def"))
                    {
                        Console.WriteLine(match.Groups[1].Value);
                    }
                }
      

  3.   


    string str = @"[abc,def],123,[def,abc],456[123,def,456,abc],[abc],[def],[123]";
    System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(@"\[[^\]]*(abc|def)[^\]]*\]");
    foreach (System.Text.RegularExpressions.Match m in reg.Matches(str))
    { MessageBox.Show(m.Value); }