0

我有一个字符串,"abc123("想检查是否包含一个或多个不是数字或字符的字符

"abc123(".matches("[^a-zA-Z0-9]+");在这种情况下应该返回 true 吗?但它没有!怎么了?

我的测试脚本:

public class NewClass {
    public static void main(String[] args) {
        if ("abc123(".matches("[^a-zA-Z0-9]+")) {
            System.out.println("true");
        }
    }
}
4

3 回答 3

5

在 Java 中,表达式必须匹配整个字符串,而不仅仅是它的一部分。

myString.matches("regex") 返回 true 或 false,具体取决于字符串是否可以完全由正则表达式匹配。重要的是要记住 String.matches() 仅在可以匹配整个字符串时才返回 true。换句话说:“正则表达式”的应用就好像您已经用字符串锚点的开始和结束编写了“^regex$”。来源

您的表达式正在寻找字符串的一部分,而不是整个内容。您可以将表达式更改为.*YOUR_EXPRESSION.*,它将扩展以匹配整个字符串。

于 2012-07-13T14:00:15.277 回答
4

与其检查它是否只包含字母和数字,为什么不检查它是否包含除此之外的任何内容?您可以使用非词组 (\W),如果返回 true,则您知道该字符串包含您要查找的字符以外的其他内容,

"abc123(".matches("[\W]");

如果这返回 true,那么除了单词字符和数字之外还有其他内容。

于 2012-07-13T13:57:18.600 回答
2

表达[^A-Za-z0-9]+的意思是“不是字母或数字”。您可能希望将其替换^[A-Za-z0-9]+$为“仅字母或数字”。

于 2012-07-13T13:57:46.577 回答