java matcher正则表达式对于浮点和运算符错误?

时间:2011-03-08 14:38:35

标签: java regex

我想尝试过滤所有运算符和操作数,包括浮点数 从命令行输入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 num

3 -  。 -  0 -  2 -

如你所见数字匹配器只是找到浮点数和正常数字,并且工作正常。但如果我在or划分的第二个匹配器中使用它 我得到3。 0作为单独的匹配。

2 个答案:

答案 0 :(得分:1)

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

"(\\+|\\*|/|\\-|\\^|\\!|_|([0-9]*\\.?[0-9]+))"

代替?因为你所拥有的只是一个大的,多重冗余的字符集:它应该只匹配第一个左方括号和最后右方括号之间的任何一个字符。这似乎是你所看到的行为。

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

答案 1 :(得分:0)

尝试不使用[]围绕整个事情。这些使它成为一个嵌套的字符类(特定于Java正则表达式的东西),因此当你删除所有重复项时,你只需要在列表\|+*/-^!_(0123456789].?)中查找单个字符。