四则运算表达式,例如:-23+(12.2+6)*(-5)-5/10,验证格式是否正确,有负号,有小数点

解决方案 »

  1.   

    ^(\(?[+-]?\(?\d+\.?\d*\)?[+-/\*]\(?[+-]?\(?\d+\.?\d*\)?)+$
    用这个匹配应该就可以的,
      

  2.   

    look一下h_lj(贝塔) 的表达式,如果正确就给分
      

  3.   

    ^[\(+-]?\(?\d+\.?\d*\)?([+-/\*]\(?[+-]?\(?\d+\.?\d*\)?)+
    用下这个
    另,匹配成功后,还应判断括号是否匹配
    首先确定是否有括号,如有用下面的表达式匹配
    (.*?\(.*?\))+一时也想不到什么简便的方法,请楼主试试
      

  4.   

    没想出好的来,不过我看了上面贴出的
    ^[\(+-]?\(?\d+\.?\d*\)?([+-/\*]\(?[+-]?\(?\d+\.?\d*\)?)+
    不行,只能验证包含符号什么的,当事实上验证不了许多运算规则。
      

  5.   

    其实也可以就简单try catch一下,如果计算成功说明运算表达式没错,如果抛出异常,说明运算表达式不对。
      

  6.   

    你用的是javascript的,还是net的?
      

  7.   

    个人认为:
        正则表达文法只能解决语言中单词组成等问题,比如描述表示浮点数,e_mail的字符串,而对于数学表达式、语句等复杂的结构问题的讨论似乎不是正则文法所能解决的。用正则表达式来判断数学表达式的合法性在理论上都是存在问题的,而此类问题应该由上下文无关语言来解决而不是正则文法,除此之外,也可以一些数学方法来解决。
      

  8.   

    写了一个数学表达式计算器,在数学表达式的逻辑错误判断方面费了不少心思,问题解决得虽算不上完美,但效果还不错,
    比如5.3+sin5/(cosln5!+sin/6)-78.6/67.7^5
    将给出如下报错信息:
    "在第 2 个 / 附近存在逻辑错误"
    感兴趣的话,可以e_mail:[email protected]