我想搜索java字符串中的任何特殊字符。 这是我的代码
Pattern p = Pattern.compile("^[a-zA-Z0-9 ]");
Matcher m = p.matcher("hgbs!hf862376");
boolean b = m.matches();
if (b == true)
System.out.println("sp. character is there");
但这不起作用。 任何人都可以为此建议正确的正则表达式。 我想只允许a-z,A-Z和0-1。
提前谢谢。
答案 0 :(得分:3)
.*[^a-zA-Z0-9 ].*
代替^[a-zA-Z0-9 ]
^(即方括号)表示否定,因此列出的字符除外。如果不在字符类中,则^表示字符串的开始。
您还需要在特殊字符之前或之后匹配任何内容。
因此,您的原始正则表达式只匹配a-zA-Z0-9
中包含单个字母的字符串。
答案 1 :(得分:2)
来自JavaDocs:
Matcher.matches()
尝试将整个输入序列与模式匹配。Matcher.find()
扫描输入序列,查找与模式匹配的下一个子序列。你应该使用Matcher.find()
你正在寻找一些匹配某些规则的子字符串(甚至一个字符),比如不是字母数字。
或者您可以使用Matcher.matches()
,但正则表达式模式应为[a-zA-Z0-9 ]+
,这意味着如果字符串仅包含有效字符,则需要匹配。如果出现任何其他字符,则matches()将返回false。
答案 2 :(得分:0)
Pattern p = Pattern.compile("^[a-zA-Z0-9]*$");
Matcher m = p.matcher("hgbs!hf862376");
boolean b = m.matches(); // looking for no special characters
if (!b) {
System.out.println("sp. character is there");
}