在java中使用正则表达式捕获变量

时间:2015-02-10 06:10:30

标签: java regex

我一直试图在程序中捕获指定的变量,这也会评估简单数学表达式的有效性。

假设声明的变量是a和bc。

我想出了类似的东西

^[+-][(a)(bc)]+[(a)(bc)]*+([+-x/][(a)(bc)]+[(a)(bc)]*)*$

我的目的是验证像

这样的表达式
+a-bc-a
-bc+a-a

但似乎这个表达式也为

返回true
-b+a+ab

我不希望因为b未指定为变量。真的很感激任何帮助。

1 个答案:

答案 0 :(得分:2)

^[+-](?:(a)|(bc))+(?:(a)|(bc))*+(?:[+-x\/](?:(a)|(bc))+(?:(a)|(bc))*)*$

[]是一个字符类,匹配单个字符,而不是交替。你的正则表达式也遭受了灾难性的回溯。 See demo.

您也可以将其缩小为

^[+-](?:a|bc)+(?:[+-x\/](?:a|bc)+)*$

See demo.