浮点和运算符的java matcher regexp错误?

浮点和运算符的java matcher regexp错误?,java,regex,Java,Regex,我想尝试过滤所有运算符和操作数,包括浮点 从带有regexp的命令行输入。当我将它与单独的匹配器一起使用时,操作符工作良好,浮点工作正常,但我想用一个regexp术语来解决这个问题 到目前为止,我的代码仍然有效 Matcher numbers = Pattern.compile("[0-9]*\\.?[0-9]+").matcher(expr); Matcher m = Pattern.compile("[\\+|\\*|/|\\-|\\^|\\!|_|([0-9]*\\.?[0

我想尝试过滤所有运算符和操作数,包括浮点 从带有regexp的命令行输入。当我将它与单独的匹配器一起使用时,操作符工作良好,浮点工作正常,但我想用一个regexp术语来解决这个问题 到目前为止,我的代码仍然有效

    Matcher numbers = Pattern.compile("[0-9]*\\.?[0-9]+").matcher(expr);
    Matcher m = Pattern.compile("[\\+|\\*|/|\\-|\\^|\\!|_|([0-9]*\\.?[0-9]+)]").matcher(expr);

    while(numbers.find()) {
            System.out.print(" " + numbers.group() + " num \n"); 
    }

    while (m.find()) {
       System.out.print(" " + m.group() + " -- \n");
    }
这是输出

3.0个 2个

3-- . -- 0 -- 2--

正如您所看到的,数字匹配器只查找浮点和普通数字,这很好。但是如果我在第二个匹配器中使用它,由


我得了3分。0作为单独的匹配项。

IIRC Java正则表达式使用括号作为分组运算符,而不是像您在那里使用的方括号。你试过了吗

"(\\+|\\*|/|\\-|\\^|\\!|_|([0-9]*\\.?[0-9]+))"
相反?因为您得到的只是一个大的、多冗余的字符集:它应该只匹配第一个左方括号和最后一个右方括号之间的任何一个字符。这似乎就是你看到的行为


或者我完全误解了第二个正则表达式的意图了吗?

试一下,不要在整个过程中使用[]。它们将其放入一个嵌套字符类(Java正则表达式特有的类),因此您只需在列表中查找单个字符
\\\\124;+*/-^_(0123456789]。?)
当所有重复项都被消除时。

我的经验是:3.0 2+波兰符号计算确定方括号中确实存在问题,我可以根据建议将其删除,或者在整个问题周围设置圆括号,这两者都有效。谢谢你的回答:)