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。
答案 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")
在第一个字符匹配后,请注意。* 。