朋友给我一个DEMO...结果有点问题!麻烦达人帮我看看 String   regex = "^"+   //匹配开头
  "[-+]"+  //开头可以出现正负号
  "([0-9]+($|[-+]))*"+  //可选数-符号-数-符号-……-数-符号或结尾
  "("+
      "("+
                 "(?<o>/()"+  //左括号,保存到o名字下
                 "[-+]?"+ //可选正负号
                 "+([0-9]+[\\-+])*"+  //可选数-符-数-符……
        ")+"+  //可以重复出现左括号
          "[0-9]+"+  //左右括号之间最起码需要一个操作数
          "("+  
                 "(?<-o>\\))"+         //右括号,匹配的同时去掉一个左括号
                  "([-+*/][0-9]+)*" + //可选符-数-符-数……
         ")+"+  //可以重复出现右括号,仅当还有左括号剩余
          "($|[-+*/])"+        //要么结尾,要么在下一个左括号出现之前出现一个运算符
  ")*"+  //重复出现左括号
  "(?(o)(?!))"+  //如果还有左括号剩余就不匹配任何东西
  "(?<=[0-9)])"+  //检查结尾前是否数字或右括号
  "$"  //匹配结尾
  ;
  
Pattern pattern=Pattern.compile(regex);
Matcher matcher=null;
                  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)",  
                  };  
运行后报如下错误:
java.util.regex.PatternSyntaxException: Look-behind group does not have an obvious maximum length near index 55
^[-+]?([0-9]+($|[-+*/]))*(((?<o>/()[-+]? ([0-9]+[-+*/])*)+[0-9]+((?<-o>/))([-+*/][0-9]+)*)+($|[-+*/]))*(?(o)(?!))(?<=[0-9)])$
                                                       ^

 

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【dong2590】截止到2008-07-23 15:36:05的历史汇总数据(不包括此帖):
    发帖的总数量:0                        发帖的总分数:0                        每贴平均分数:0                        
    回帖的总数量:1                        得分贴总数量:1                        回帖的得分率:100%                     
    结贴的总数量:0                        结贴的总分数:0                        
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:---------------------结分的百分比:---------------------
    无满意结贴率:---------------------无满意结分率:---------------------
    如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html
      

  2.   

    (?<o>) (?<-o>) 这是 .net 中专门用于匹配对称结构的表达式,可以实现递归和嵌套匹配。(?<o>/() 每匹配一个“(”将深度加 1
    (?<-o>\)) 每匹配一个“)”将深度减 1
    (?(o)(?!)) 确保在全部完成后的深度为 0这种结构是 .NET 的特性,Java 中不支持这种结构!
      

  3.   

    目前版本的 Java 无法使用正则表达式完成 N 层嵌套结构的匹配!