java中的分层正则表达式

java中的分层正则表达式,java,regex,Java,Regex,因此,我必须解析这个字符串并编写一个验证函数,这样lastYearFee和currentYearFee的总和应该与studentType 0的netChange匹配 在此示例中:对于0类学生,lastYearFee为10.00,currentYearFee为49.99,Netcharge为60.00。总数为59.99,与净费用不符。所以我必须在currentYearFee中加上0.01 我想到的解决办法。。 搜索去年费用、搜索当年费用、搜索和网络费用。检查差异并调整当前年度费用。但我不会为此编写

因此,我必须解析这个字符串并编写一个验证函数,这样lastYearFee和currentYearFee的总和应该与studentType 0的netChange匹配

在此示例中:对于0类学生,lastYearFee为10.00,currentYearFee为49.99,Netcharge为60.00。总数为59.99,与净费用不符。所以我必须在currentYearFee中加上0.01

我想到的解决办法。。 搜索去年费用、搜索当年费用、搜索和网络费用。检查差异并调整当前年度费用。但我不会为此编写正则表达式。假设这个结构从未改变,我们将如何编写解决方案

问题2: 挑战: 我得让逻辑有点泛化。。 我想写一个正则表达式来提取信息

  • 获取studentList::schoolObject,后跟classDetails,后跟studentList。。 所以这会给你

      {
        schoolObject:{
          schoolDetails:{
            PrincipleId:5706980052,
            isPaymentDone:false,
            classId:"500720478039",
            classDetails:[
              {
                classId:123591,
                studentList:[
                  {
                    studentType:0,
                    categoryName:"",
                    lastYearFee:{
                      amount:10.00,
                      denomination:"INR"
                    },
                    currentYearFee:{
                      amount:49.99,
                      denomination:"INR"
                    }
                  },
                  {
                    studentType:1,
                    categoryName:"",
                    lastYearFee:{
                      amount:5.00,
                      denomination:"INR"
                    },
                    currentYearFee:{
                      amount:15.00,
                      denomination:"INR"
                    }
                  }
                ],
                ItemId:1234567,
                schoolInternalId:"976-345272383",
                netAmount:{
                  amount:60.00,
                  denomination:"INR"
                },
                studentAccountId:953217682525
              }
      }
    
    现在可以有多个条目,对于studentType 0,1,2。。。其中只有0。。。studentType:0本身中可以有多个条目。这里只有currentYearFee和lastYearFee。可以有更多

  • 现在,schoolObject中的金额后跟classDetails,后跟netCharge

  • 获取不同的,并修改studentList中的最后一项


  • 注意:这看起来像JSON,但字段名称中没有双引号。我无法将其转换为JSON。我必须修改字符串

    如果你不想重新发明轮子,你可以用Javascript引擎处理它(你的数据似乎是有效的js对象),并从中获取结果对象,用java处理它们。但我不确定我是否会这样做,这更像是一种黑客行为,而不是一个合适的解决方案。这必须在JAVA中完成。是的,这是一个短期的黑客行为。理想情况下,我永远不会修改字符串。我会使用像Fusion这样的表达式来修改它。但是Hack就是我要找的。如果它是一种潜在的递归语言,你就不能用正则表达式来解析它。您需要为它编写一个解析器。也许您可以找到一个JSON解析器,它可以容忍字段名中的引号。或者你可以使用antlr这样的工具自己编写一个简单的脚本。你知道Java中有一个Javascript引擎,不是吗?@saurabhagarwal我知道这必须用Java完成,这就是为什么我要谈论Javascript引擎。它们是标准java库的一部分。
    studentList:[
      {
        studentType:0,
        categoryName:"",
        lastYearFee:{
          amount:10.00,
          denomination:"INR"
        },
        currentYearFee:{
          amount:49.99,
          denomination:"INR"
        }
      },
      {
        studentType:1,
        categoryName:"",
        lastYearFee:{
          amount:5.00,
          denomination:"INR"
        },
        currentYearFee:{
          amount:15.00,
          denomination:"INR"
        }
      }
    ]