Java 算术表达式的正则表达式

Java 算术表达式的正则表达式,java,regex,arithmetic-expressions,Java,Regex,Arithmetic Expressions,一、 我试图写一个正则表达式来检查给定的字符串 a+b、2+a+b、3+6*9+6*5+a*b等等 仅限+和*运算符 我试过了 if(str.matches(“(\\d |\\w\\\+\\\\*){1,}\\d |\\w”) 不幸的是,它只处理像3*7这样的情况。。。(数字*数字) 等待您的答案,谢谢阅读。将*和+放入字符类中 str.matches("\\w(?:\\s[+*]\\s\\w)+"); 这将处理简单和链式计算的情况 [0-9A-Za-a]*( ){0,}([+-/*]( ){

一、 我试图写一个正则表达式来检查给定的字符串 a+b、2+a+b、3+6*9+6*5+a*b等等

仅限+和*运算符

我试过了

if(str.matches(“(\\d |\\w\\\+\\\\*){1,}\\d |\\w”)

不幸的是,它只处理像3*7这样的情况。。。(数字*数字)


等待您的答案,谢谢阅读。

*
+
放入字符类中

str.matches("\\w(?:\\s[+*]\\s\\w)+");

这将处理简单和链式计算的情况

[0-9A-Za-a]*( ){0,}([+-/*]( ){0,}[0-9A-Za-a]*( ){0,})*
例如,这将匹配

  • 1+2
  • 1+2
  • 1+a*14/9

(您可以通过更新
[+-/*]
来更改所需的运算符)

字符类(ala@AvinashRaj)显然更好。纯粹出于教育目的,你使用竖条的问题在于你没有在前后对事物进行分组。如果您想要
\+\\\*
,那么您需要像
(?:\\+\\\\*)
一样对它们进行分组。与
\\d |\\w
相同,但这并不重要,因为\\w包含\\d。匹配运算符(与数值常量/符号名称相对)只是解析表达式(称为标记化)的第一步。下一步是构建一个解析树,这样您就可以正确地计算括号的内外值、加法之前的乘法等。相关答案:标记器和解析树上的Blog:@MedAl既然您是StackOverflow新手,我建议您阅读为什么所有的
{0,}
而不仅仅是
*
?由于在
[0-9a-z]
之后有
*
而不是
+
,因此re也将匹配
+
+-*/
或etcIt的
({0,}
,因此它允许在操作数之间使用可选空格,并且只允许空格,但不允许空格星号(`*`````)执行与打开paren空间关闭paren打开卷曲零逗号关闭卷曲相同的操作<代码>\s*会更好。