我想检查一个字符串是否仅包含字母,a-zA-Z,数字0-9和运算符(+=-*/^)

例如,以下表达式将是允许的:3 + 5(x^2)

例如,以下表达式将是不允许的:3 $+ 5(x^2)

我会使用matchs函数来做到这一点吗?

我试过了:

// contains only operators, numbers, or letters
if(!exp.matches("[(+=-*/^)a-zA-Z0-9]")) {
    return false;
}


我也尝试过转义星号,但是没有用。

最佳答案

您应该转义-或将其放在字符类的开头/结尾,否则它将创建一个范围。请注意,[=-*]范围无效:

java - 检查字符串是否仅包含指定字符-LMLPHP

同样,您需要一个量词+来匹配1个或多个字符,*来匹配0或多个字符。

采用

if(!exp.matches("[a-zA-Z0-9+=*/^()-]+")) {
        return false;
}


如果不需要匹配(),请将其从字符类中删除。

另外,由于String#matches()需要完整的字符串匹配,因此在正则表达式的开头和结尾都不需要锚。

10-06 13:02
查看更多