简单的java正则表达式问题

时间:2010-02-12 10:36:26

标签: java regex

为什么这段代码会失败?

assertTrue(Pattern.matches("[^a-zA-Z0-9]", "abc;"));

5 个答案:

答案 0 :(得分:3)

因为.matches()方法尝试匹配整个字符串,并且正则表达式与整个字符串不匹配,只有分号。 Matcher.find()方法可行(在这种情况下:找到一个字母,它不是a和z之间的字母,也不是0到9之间的数字。当然,它也会找到á,ö等。)

你真的想做什么?

答案 1 :(得分:2)

如果失败,因为匹配尝试匹配整个字符串,则正则表达式匹配1个字符,如果您更改为:

,则该字符不在您列出的字符范围内
assertTrue(Pattern.compile("[^a-zA-Z0-9]").matcher("abc;").find());

它应该断言真实。

答案 2 :(得分:1)

因为Pattern.matches() is equivalent to正在编译相应的模式并将其提供给Matcher.matches()as specified检查整个输入是否与模式匹配。如果您只想匹配部分输入,则需要使用Matcher.find()

答案 3 :(得分:0)

尝试“^ [a-zA-Z0-9]”作为模式

答案 4 :(得分:0)

因为当你把^放在里面时,它意味着any char not in a-z or A-Z。你想要的是^[a-zA-Z0-9]