Java正则表达式:检查单词是否包含非字母数字字符

rem*_*emo 18 java regex

这是我的代码,用于确定单词是否包含任何非字母数字字符:

  String term = "Hello-World";
  boolean found = false;
  Pattern p = Pattern.Compile("\\W*");
  Matcher m = p.Matcher(term);
  if(matcher.find())
    found = true;
Run Code Online (Sandbox Code Playgroud)

我想知道正则表达式是否错误.我知道"\W"会匹配任何非单词字符.对我失踪的任何想法?

Ale*_*lex 16

将你的正则表达式改为:

.*\\W+.*
Run Code Online (Sandbox Code Playgroud)


sfr*_*frj 5

这是您正在寻找的表达式:

“^[a-zA-Z0-9]+$”

当它的计算结果为 false 时,意味着不匹配,这意味着您找到了想要的东西。


Joh*_*der 5

现在是 2016 年或更晚,您应该考虑来自其他字母的国际字符串,而不仅仅是拉丁字母。[^a-zA-Z]在这种情况下,经常引用的将不匹配。Java 现在有更好的方法:

[^\\p{IsAlphabetic}^\\p{IsDigit}]
Run Code Online (Sandbox Code Playgroud)

请参阅参考资料(“Unicode 脚本、块、类别和二进制属性的类”部分)。还有这个答案我觉得很有帮助。