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

时间:2011-03-31 20:49:32

标签: java regex

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

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

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

9 个答案:

答案 0 :(得分:16)

将正则表达式更改为:

.*\\W+.*

答案 1 :(得分:4)

这是您正在寻找的表达:

  

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

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

答案 2 :(得分:4)

It's 2016 or later and you should think about international strings from other alphabets than just Latin. The frequently cited [^a-zA-Z] will not match in that case. There are better ways in Java now:

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

See the reference (section "Classes for Unicode scripts, blocks, categories and binary properties"). There's also this answer that I found helpful.

答案 3 :(得分:3)

方法是错误的。

匹配器被声明为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();

:)

答案 4 :(得分:2)

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

答案 5 :(得分:1)

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

boolean found = false;
for (int i=0;i<mystring.length();++i) {
  if (!Character.isLetterOrDigit(mystring.charAt(i))) {
    found=true;
    break;
  }
}

答案 6 :(得分:0)

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

答案 7 :(得分:0)

如果可以使用Apache StringUtils,那么就像下面的

一样简单
StringUtils.isAlphanumeric(inp)

答案 8 :(得分:-1)

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