2013-02-04 93 views
3

我試圖用一個模式檢查對字符串,而由於某種原因,它是說,這不應該匹配的字符串,做..Java的模式匹配器逗號

代碼:

private static final Pattern VALID_TOKEN = Pattern.compile("^[a-zA-Z0-9\\{\\}\\[\\].+-/=><\\\\*]*$"); 
System.out.println(VALID_TOKEN.matcher(token).matches()); 

示例:

"123" = true 
"1,3" = true // Should NOT BE TRUE 
"123*123" = true 
"123*^123" = false 

除了「1,3」模式不應包含COMMA外,上述所有示例都是正確的。有沒有人有任何想法?

回答

2

你需要躲避破折號

+-/ 

否則,它被解釋爲一個範圍'+''/' - 包括'+'',''-'一個範圍。 '.''/'

private static final Pattern VALID_TOKEN = Pattern.compile("^[a-zA-Z0-9\\{\\}\\[\\].+\\-/=><\\\\*]*$"); 
//        Here ------------------------------------------------^^ 

或者,可以移動至劃線到字符類的末尾(即,閉合]之前把它)。