Java 正则表达式匹配它不应该匹配的东西?
我有一个相当简单的正则表达式,它不做我期望它做的事情 我想要一个匹配单字母字符串的正则表达式,如果它们是smilies中常见的几个元素之一,例如括号、冒号等 我无意中遇到了一个案例,一个问号让我的正则表达式着火了,我不明白为什么 我使用Java 8(Oracle)并对我的问题进行了Junit测试:Java 正则表达式匹配它不应该匹配的东西?,java,regex,Java,Regex,我有一个相当简单的正则表达式,它不做我期望它做的事情 我想要一个匹配单字母字符串的正则表达式,如果它们是smilies中常见的几个元素之一,例如括号、冒号等 我无意中遇到了一个案例,一个问号让我的正则表达式着火了,我不明白为什么 我使用Java 8(Oracle)并对我的问题进行了Junit测试: @Test public void test(){ assertFalse(Pattern.matches("[:;-pP8xXdD\\(\\)]", "?")); } 它应该求值为fals
@Test
public void test(){
assertFalse(Pattern.matches("[:;-pP8xXdD\\(\\)]", "?"));
}
它应该求值为false,但它匹配,为什么?该
-p部分定义了中ASCII字符的范围代码>(59)到p
(112)。这包括?
(63)
要修复它,请将-
放在字符组([]
)的开始/结束处,或使用\
转义-p部分定义了中ASCII字符的范围代码>(59)到p
(112)。这包括?
(63)
要修复它,请将-
放在字符组([]
)的开始/结束处,或使用\
转义为\-是,它应该是\-
,因为-
是一个表示rangeyes的特殊字符,它应该是\-
,因为-
是一个表示范围的特殊字符。我认为您需要转义-
。否则,它会认为这是一个范围。我认为您需要避开-
。否则,它会认为这是一个范围。