Java Regex:检查一个句子是否只包含字母和数字

时间:2014-09-21 06:25:00

标签: java regex match

我的以下程序打印出我不理解的奇怪结果,我想这是由于我对Java Regex缺乏了解。所以我希望先将testStr按时间段分割,然后检查每个句子是否包含字母或数字。但令人惊讶的是,我得到了以下输出,这与我的愿望相反:

blah blah1 is not a character!
 blah blah2 is not a character!
 blah blah3 is not a character!
 ??** is not a character!     // only this output is expected

我的代码如下:

String testStr = "blah blah1. blah blah2. blah blah3. ??**...";
String[] myStrArray = testStr.split("[.]");

System.out.println("length of myStrArray is: " + myStrArray.length);

for (String str : myStrArray) {
    if (!Pattern.matches("\\w+", str)) {
        System.out.println(str + " is not a character!");
        continue;
    }

    System.out.println("got a meaningful sentence " + str.trim());

}

3 个答案:

答案 0 :(得分:3)

你的程序使用dot作为分隔符来分割字符串,所以你得到:

blah blah1 
blah blah2 
blah blah3 
??**...

然后,您尝试使用正则表达式\w+ 匹配每一行。请注意,match()的来电相当于find()的来电,但包含^$的正则表达式,即认为您的正则表达式为^\w+$

我认为现在很明显,你的任何一个字符串都不匹配这个模式,因为3个第一个字符串包含空格,而最后一个不包含字母字符或数字。

答案 1 :(得分:2)

将您的正则表达式更改为:^[a-zA-Z0-9\s]+$它将仅根据需要允许使用字符,数字和空格。注意“魔法”的一部分是使用强制完全匹配的^$(从开始到结束)。

此外,我使用a-zA-Z0-9代替\w的原因是\w包含不符合要求的_

答案 2 :(得分:0)

您可以使用字符集。将正在使用的正则表达式("\\w+")更改为:

"[\\s&&[^\\W_]]"

这样可以匹配字母数字[^\W_] => a-zA-Z0-9)和空格(\s),而不仅仅是单词字符。