3

我正在尝试对字符串使用模式检查,由于某种原因,它说不应该匹配的字符串,做..

代码:

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”模式不应包含逗号。有没有人有任何想法?

4

1 回答 1

2

你需要逃离破折号

+-/

否则,它被解释为一个范围 from '+'to '/'- 一个包含'+', ',',的范围'-''.', 和'/'.

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

或者,您可以将破折​​号移到字符类的末尾(即,将它放在结束符之前])。

于 2013-02-04T04:23:45.693 回答