-1

我在使用正则表达式时遇到问题。

这就是我所拥有的:

String expr = "1+4+3-2"
Matcher m;

while(Pattern.matches("[+-].*", expr))
{
    (m = Pattern.compile("[+-](.*)").matcher(expr)).find();
    expr = parseTerm(m.group(1));
    System.out.println("+: " + expr)
}

我试图在上面的字符串中找到“+”或“-”(或任何其他带有 + 和 - 的计算,例如1+D[0]+D[5])。当我找到 + 或 - 时,我想用操作的左侧和右侧的数字进行操作。所以 1+4 将加到 5。然后 5+3 将加到 8,最后 8-2 将减去最终得到 6。由于某种原因,我当前的代码没有通过 while 循环,所以我m 不能加或减任何东西。我究竟做错了什么?

4

2 回答 2

0

您必须只捕获数字:

 (m = Pattern.compile("[+-]([0-9]*)").matcher(expr)).find();

不是任何符号!( .*)。因为在这种情况下,您会捕捉到整个表达式。

如果标记中可能有其他符号(但不是 + 或 =),您可以这样做:

 (m = Pattern.compile("[+-]([^+-]*)").matcher(expr)).find();
于 2013-01-26T06:43:19.300 回答
0

参考:pattern.matcher() 与 pattern.matches()

while (Pattern.compile("[\\+-]").matcher(expr).find())
{
   ....
}
于 2013-01-26T07:17:29.550 回答