簡體   English   中英

Java Regex:檢查句子是否僅包含字母和數字

[英]Java Regex: check if a sentence contains only alphabet and numbers

我的以下程序打印出我不了解的奇怪結果,我猜這是由於我對Java Regex缺乏深入的了解。 因此,我希望testStr句點分隔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());

}

您的程序使用點作為分隔符分割字符串,因此您得到:

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

然后,您嘗試使用regex \\w+ 匹配每一行。 請注意, match()調用等效於find()調用,但是正則表達式包含^$ ,即認為您的正則表達式為^\\w+$

我認為現在很明顯您的任何一個字符串都不匹配此模式,因為前三個字符串包含空格,而最后一個字符串既不包含字母字符也不包含數字。

將您的正則表達式更改為: ^[a-zA-Z0-9\\s]+$它將僅允許使用字符,數字和空格。 請注意,“魔術”的一部分是使用^$強制完全匹配(從開始到結束)。

此外,我使用a-zA-Z0-9代替\\w\\w包含_ ,這不符合要求。

您可以使用字符集。 將您正在使用的正則表達式( "\\\\w+" )更改為此:

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

這將允許字母數字( [^\\W_] => a-zA-Z0-9 )和空格( \\s )匹配,而不僅僅是單詞字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM