想要在String中搜索,如果有任何特殊字符

时间:2011-06-17 08:18:46

标签: java regex

我想搜索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。

提前谢谢。

3 个答案:

答案 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");
}