简单算术字符串的正则表达式

nat*_*ant 1 java regex math

我正在尝试验证一个简单的算术表达式,以确保它适合格式操作数运算符操作数:234.34 + 5.我想出了如何足够简单地验证这一点,但我希望用户能够继续输入2个以上的值如:234.34 + 5/6*7 - -34.到目前为止,我的正则表达式如下:

[-]*\d+[.\d+[E\d+]*]*[\s+[*+/-]\s+[-]*\d+[.\d+[E\d+]*]*]*
Run Code Online (Sandbox Code Playgroud)

这部分有效,但我遇到的问题是它允许一些我不想要的奇怪的东西,如-4.34.1 - 34 +

有什么建议?

Mih*_*der 5

试试这个.它很难看,但它应该有效(如果你没有使用任何括号):

-?\d+(?:\.\d+(?:E\d+)?)?(\s*[-+/\*]\s+-?\d+(?:\.\d+(?:E\d+)?)?)+
Run Code Online (Sandbox Code Playgroud)

说明

这将数字一个数字后跟一个运算符和一个数字无限期

  • -?\d+(?:\.\d+(?:E\d+)?)? 匹配一个号码
  • (
    • \s* 可选的空格
    • [-+/\*]任何运营商:+,-,*,/
    • \s+ 至少一个空格(以避免--b)
    • -?\d+(?:\.\d+(?:E\d+)?)? 匹配另一个号码
  • )+ 重复此块一次或多次

数字表达式:

  • -? 可选的 -
  • \d+ 数字(一个或多个)
  • (?: 可选部分的开始
    • \.
    • \d+ 数字
    • (?: 开始选择科学记数部分
      • E匹配Echar
      • \d+ 匹配digitx
    • )? 关闭可选的科学notatotion部分
  • )? 关闭可选组

但我强烈建议尝试为此编写一个合适的解析器,它也将允许支持括号:a + (b + c).