关于Java中的正则表达式(非常简单,但我不知道为什么它不起作用

时间:2012-07-09 09:46:03

标签: java regex

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。

2 个答案:

答案 0 :(得分: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(),即文本中有多个模式匹配,但没有一个完全匹配,因为你的模式只匹配一个字符。

答案 1 :(得分:2)

您的匹配正在尝试单独匹配一个字符。

您应该重新启动匹配以指示第一个字符,而不是您不关心的其余字符。

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

在第一个字符匹配后,请注意。*