java - 检查一个字符串是否只包含指定的字符

标签 java regex

我想检查一个字符串是否只包含字母 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;
}

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

最佳答案

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

enter image description here

此外,您还需要一个量词,+ 匹配 1 个或多个字符,* 匹配 0 个或多个字符。

使用

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

如果不需要匹配(),将它们从字符类中移除。

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

关于java - 检查一个字符串是否只包含指定的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43355277/

相关文章:

java - 在 Java/Apache Tomcat Web 应用程序中适当使用 ServletContextListener

java - 什么KeyEvent.vk_映射到App键?

java - 程序运行良好,但现在我无法发现错误

javascript - JS : Searching a list of objects inside another

sql - 正则表达式匹配除特定给定字符串之外的任何内容(包括空字符串)

html - 如何在 html 文本框中只允许 4 位数字?

java - 正则表达式 : some groups missing

java - 如何使用 Mockito 模拟 Scala 中的 Void 返回类型?

Java- Toolkit.getLockingState 不更新

ReplaceAll 正则表达式引起的 Java OutOfMemoryError