[英]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.