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

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

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

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

将你的正则表达式改为:

 .*\\W+.* 

这是您正在寻找的表达:

“^ [A-ZA-Z0-9] + $”

当它评估为false时意味着不匹配,这意味着你找到了你想要的东西。

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

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

请参阅参考资料 (“Unicode脚本,块,类别和二进制属性的类”一节)。 我发现这个答案也很有帮助。

方法是错误的。

匹配器被声明为m但用作匹配器。

重复应该是“一个或多个”+而不是“零或多个”*这是正常的:

 String term = "Hello-World"; boolean found = false; Pattern p = Pattern.compile("\\W+");//<-- compile( not Compile( Matcher m = p.matcher(term); //<-- matcher( not Matcher if(m.find()) { //<-- m not matcher found = true; } 

顺便说一下,如果你只是这样就足够了:

 boolean found = m.find(); 

🙂

问题是'*''*'匹配ZERO或更多字符。 您希望匹配至少一个非单词字符,因此必须使用'+'作为数量修饰符。 因此匹配\W+ (大写W有非单词)

你的表达没有考虑可能的非英文字母。 它也比它需要的更复杂。 除非你出于某种原因使用正则表达式而不是需要(例如你的教授告诉过你),否则你会更好:

 boolean found = false; for (int i=0;i 

当我不得不做同样的事情时,我使用的正则表达式是“(\ w)*”这就是我使用的东西。 不确定国会大厦是否相同,但我也使用括号。

 if (value.matches(".*[^a-zA-Z0-9].*")) { // tested, seems to work. System.out.println("match"); } else { System.out.println("no match"); }