< DOCTYPE html PUBLIC -WCDTD XHTML StrictEN httpwwwworgTRxhtmlDTDxhtml-strictdtd>
相关链接: Regex regex = new Regex(@" ^ (?#匹配开头) [-+]? (?#开头可以出现正负号) ([0-9]+($|[-+*/]))* (?#可选数-符号-数-符号-……-数-符号或结尾) ( ( (?<o>\() (?#左括号,保存到o名字下) [-+]? (?#可选正负号) ([0-9]+[-+*/])* (?#可选数-符-数-符……) )+ (?#可以重复出现左括号) [0-9]+ (?#左右括号之间最起码需要一个操作数) ( (?<-o>\)) (?#右括号,匹配的同时去掉一个左括号) ([-+*/][0-9]+)* (?#可选符-数-符-数……) )+ (?#可以重复出现右括号,仅当还有左括号剩余) ($|[-+*/]) (?#要么结尾,要么在下一个左括号出现之前出现一个运算符) )* (?#重复出现左括号) (?(o)(?!)) (?#如果还有左括号剩余就不匹配任何东西) (?<=[0-9)]) (?#检查结尾前是否数字或右括号) $ (?#匹配结尾) ", RegexOptions.IgnorePatternWhitespace); string[] tests = new string[] { "1", "1+23", "1+23*456", "1*(23+456)", "(3)", "((67+8)*9+10)/11", "12+(13*)", "()", "((3)", "(3))", "+3", "5*(4+3/(-2))", "(5*(4+3/(-2))", "5*(4+3/(-2)))", "+3*", "+(4)+(-5)", "+(4)(5)", }; foreach (string s in tests) Console.WriteLine("{0}: {1}", regex.IsMatch(s) ? "Good" : " Bad", s); Console.ReadKey(); 完整正则应为:^[-+]?([0-9]+($|[-+*/]))*(((?<o>\()[-+]?([0-9]+[-+*/])*)+[0-9]+((?<-o>\))([-+*/][0-9]+)*)+($|[-+*/]))*(?(o)(?!))(?<=[0-9)])$
本文转自 netcorner 博客园博客,原文链接: http://www.cnblogs.com/netcorner/archive/2008/09/27/2912107.html ,如需转载请自行联系原作者