我想检查一个字符串是否只包含字母 a-zA-Z
、数字 0-9
和运算符 (+=-*/^)
例如,以下表达式是允许的:3 + 5(x^2)
例如,以下表达式不是允许的:3 $+ 5(x^2)
我会使用 matches 函数来做到这一点吗?
我试过:
// contains only operators, numbers, or letters
if(!exp.matches("[(+=-*/^)a-zA-Z0-9]")) {
return false;
}
我也试过转义星号,但没用。
最佳答案
您应该转义 -
或将其放在字符类的开头/结尾,否则它会创建一个范围。请注意,[=-*]
范围无效:
此外,您还需要一个量词,+
匹配 1 个或多个字符,*
匹配 0 个或多个字符。
使用
if(!exp.matches("[a-zA-Z0-9+=*/^()-]+")) {
return false;
}
如果不需要匹配(
和)
,将它们从字符类中移除。
此外,由于 String#matches()
需要完整的字符串匹配,因此正则表达式的开头和结尾不需要 anchor 。
关于java - 检查一个字符串是否只包含指定的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355277/