Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用正则表达式查找+;或-_Java_Regex - Fatal编程技术网

Java 使用正则表达式查找+;或-

Java 使用正则表达式查找+;或-,java,regex,Java,Regex,我在使用正则表达式时遇到问题 这就是我所拥有的: String expr=“1+4+3-2” 匹配器m while(Pattern.matches("[+-].*", expr)) { (m = Pattern.compile("[+-](.*)").matcher(expr)).find(); expr = parseTerm(m.group(1)); System.out.println("+: " + expr) } 我试图在上面的字符串中找到“+”或“-”(或任

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

这就是我所拥有的:

String expr=“1+4+3-2”
匹配器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 = Pattern.compile("[+-]([0-9]*)").matcher(expr)).find();
没有任何符号!(
*
)。因为在这种情况下,你抓住了整个表达式

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

 (m = Pattern.compile("[+-]([^+-]*)").matcher(expr)).find();
参考资料:


+
是正则表达式中的保留标记。使用
“[\\+-](.*)”
@shivamkara:不,不在sybol类
[]
中。您的表达式是否只包含
+
-
?我是说
*
/
,或者
括号
?这里必须考虑前置规则。是的,我在另一个函数中处理*和/但该函数有一个类似于此函数的问题。它不会进入while loop.regex来解析表达式…伪造它..我实际上没有提到这一点,但它并不总是后跟+/-数字。例如,我可以有1+D[0]+5@user1831442.. 正则表达式不够聪明,无法理解表达式的含义。它不知道
D[0]
应该是什么。您可能使用了错误的工具。但我不需要它来确定
D[0]
是什么。我所需要做的就是进入while循环,它不会进入。你改变的是m的赋值,而不是while循环的条件,以便我的程序进入它。我也尝试过将while循环条件更改为
“[+-]([^+-]*)”
,但仍然不起作用;我没有重写整个代码
while (Pattern.compile("[\\+-]").matcher(expr).find())
{
   ....
}