如题,等式中有()+-/*^这7个符号,哪位大虾帮我写个正则判断一个等式是否合法.

解决方案 »

  1.   

    ^(((((\d+[+-\\*/])*\d+)|(\((\d+[+-\\*/])*\d+)\)))[+-\\*/])*((((\d+[+-\\*/])*\d+)|(\((\d+[+-\\*/])*\d+)\)))$
      

  2.   


    String math = "5+5*4+(2^2)";
    String reg = "^(\\d+[\\+\\-\\*/\\^]|\\d+[\\+\\-\\*/\\^]\\(|\\d+\\)[\\+\\*\\-/\\^])+(\\d+\\)|\\d+)$";
    System.out.println(math.matches(reg));
      

  3.   


    Java 中的正则表达式不支持嵌套结构!
      

  4.   

    这不是正则语言,不能表达成正则表达式。即使使用反向引用,正则表达式也是办不到的。因为包含有任意层括号嵌套的语言不是正则语言,不能被DFA(确定有限状态自动机)识别。而正则表达式是一种“正则语言”,而某种语言是一个“正则语言”的一个必要条件是“能够被DFA识别”。而括号嵌套语法需要不确定的存储空间来存放识别过程中的状态,这超出了DFA的能力范围。从理论上讲,没有任何人有这个能力写出这样的正则表达式。这种表达式文法上属于上下文无关文法,可以使用LR/LL语法分析器进行分析。javacc 是一种广泛使用的 java 语言实现的 LL 分析工具。可以使用 javacc 来分析。如果只是简单地表达有限的语法,用不着使用 javacc 。只要借用堆栈,就可以很快地写出一个自己需要的语法解析器。
      

  5.   

    try{
     i= 表达式
    }catch{
      表达式不合法!
      

  6.   

    引用 17 楼 zhigangxie 的回复:
    这不是正则语言,不能表达成正则表达式。 即使使用反向引用,正则表达式也是办不到的。因为包含有任意层括号嵌套的语言不是正则语言,不能被DFA(确定有限状态自动机)识别。而正则表达式是一种“正则语言”,而某种语言是一个“正则语言”的一个必要条件是“能够被DFA识别”。而括号嵌套语法需要不确定的存储空间来存放识别过程中的状态,这超出了DFA的能力范围。从理论上讲,没有任何人有这个能力写出这样的正则表达式。 这种表达式文法上属于上下文无关文法,可以使用LR/LL语法分析器进行分析。javacc 是一种广泛使用的 java 语言实现的 LL 分析工具。可以使用 javacc 来分析。 如果只是简单地表达有限的语法,用不着使用 javacc 。只要借用堆栈,就可以很快地写出一个自己需要的语法解析器。 
    哦,学习了