1
public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println(Pattern.matches("[^A-Za-z0-9]","@#%abc"));
}

这是关于 Java 中正则表达式的非常非常简单的代码。

据我所知, [^A-Za-z0-9] 与任何特殊字符匹配时应该返回 true,因为 [^ 表示否定,A-Za-z0-9 表示包括数字在内的所有字符。我不知道为什么上面的代码一直返回 false,而不是 true。

4

2 回答 2

2

添加一个+:

System.out.println(Pattern.matches("[^A-Za-z0-9]+.*","@#%abc"));
// no, this will only match the first few characters,
// added wildcard to catch the rest

Pattern.matches()表示完全匹配,即整个模式从头到尾匹配文本。在您的情况下,您正在执行 find(),即文本中有多个 Pattern 匹配,但不是一个完整匹配,因为您的模式仅匹配一个字符。

于 2012-07-09T09:47:17.183 回答
2

您的匹配试图单独匹配一个字符。

相反,您应该重新配置匹配以指示第一个字符和您不关心的其余字符,例如

Pattern.matches("[^A-Za-z0-9].*","@#%abc")

注意第一个字符匹配后的.* 。

于 2012-07-09T09:49:21.963 回答