这种正则表达式太难,还是要问前辈
http://topic.csdn.net/u/20100320/12/fb0c7ef2-e341-4394-a3ef-ff383ee8fa74.html
昨天问的,但是我想做到是
允许:
115h(1354(214g(fdsf)))
不允许(不允许并排):
115h(1354(214g(fdsf)214g(fdsf)))
且括号里不能为空。
谢谢!

解决方案 »

  1.   

    本帖最后由 lxcnn 于 2010-03-21 14:24:15 编辑
      

  2.   

    哦,漏了非空的需求string[] test = { "115h(1354(214g(dkfj(dkjf(xfds(dfs))))))", "115h(1354(214g(fdsf)214g(fdsf)))", "115h(1354(214g(fdsf)))", "115h(1354(214g()))" };
    Regex reg = new Regex(@"^[^()]+\((?>\((?!\))(?<o>)|\)(?![^()]*\()(?<-o>)|[^()]*)*(?(o)(?!))\)$");
    foreach (string s in test)
    {
       if (reg.IsMatch(s))
       {
           richTextBox2.Text += "源字符串:" + s +  "   合法!\n";
       }
           else
       {
           richTextBox2.Text += "源字符串:" + s + "   不合法!\n";
       }
    }
    /*---------输出-------
    源字符串:115h(1354(214g(dkfj(dkjf(xfds(dfs))))))   合法!
    源字符串:115h(1354(214g(fdsf)214g(fdsf)))   不合法!
    源字符串:115h(1354(214g(fdsf)))   合法!
    源字符串:115h(1354(214g()))   不合法!
    */
      

  3.   

    上面还是漏了一种情况,115h()也被认为合法了string[] test = { "115h(1354(214g(dkfj(dkjf(xfds(dfs))))))", "115h(1354(214g(fdsf)214g(fdsf)))", "115h(1354(214g(fdsf)))", "115h(1354(214g()))", "115h()" };
    Regex reg = new Regex(@"^[^()]+\((?!\))(?>\((?!\))(?<o>)|\)(?![^()]*\()(?<-o>)|[^()]*)*(?(o)(?!))\)$");
    foreach (string s in test)
    {
       if (reg.IsMatch(s))
       {
           richTextBox2.Text += "源字符串:" + s +  "   合法!\n";
       }
           else
       {
           richTextBox2.Text += "源字符串:" + s + "   不合法!\n";
       }
    }
    /*---------输出-------
    源字符串:115h(1354(214g(dkfj(dkjf(xfds(dfs))))))   合法!
    源字符串:115h(1354(214g(fdsf)214g(fdsf)))   不合法!
    源字符串:115h(1354(214g(fdsf)))   合法!
    源字符串:115h(1354(214g()))   不合法!
    源字符串:115h()   不合法!
    */