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

2022-09-02 20:44:42

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

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

我想知道正则表达式是否错误。我知道会匹配任何非单词字符。关于我错过了什么的任何想法?"\W"


答案 1

将正则表达式更改为:

.*\\W+.*

答案 2

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

[^\\p{IsAlphabetic}^\\p{IsDigit}]

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